随笔-9  评论-6  文章-5  trackbacks-0
使用最原始的调用COM组件的方法,这个方法假设COM组件的dll已经被注册到系统中了

CoInitialize(NULL) ;


IX* pIX = NULL ;  
HRESULT hr = CoCreateInstance(CLSID_CA,
NULL,
CLSCTX_INPROC_SERVER,
IID_IX,
(void**)&pIX) ;
if (SUCCEEDED(hr))
{

pIX->Fx() ;

IY* pIY = NULL ;
hr = pIX->QueryInterface(IID_IY, (void**)&pIY) ;
if (SUCCEEDED(hr))
{
pIY->Fy() ;

IX* pIX2 = NULL ;
hr = pIY->QueryInterface(IID_IX, (void**)&pIX2) ;
if (SUCCEEDED(hr))
{
pIX2->Fx() ;
pIX2->Release();
}
else
{
cout<<"Could not get interface IX from IY."<<endl; ;
}
pIY->Release() ;
}


pIX->Release() ;
}
else
{
cout<<"Could not create component."<<endl;;
}

// Uninitialize COM Library
CoUninitialize() ;
return 0;
posted on 2010-12-02 11:00 BirdsHover 阅读(313) 评论(2)  编辑 收藏 引用

评论:
# re: 使用最原始的调用COM组件的方法 (转) 2010-12-02 11:02 | BirdsHover
有些COM组件的tlb是做在dll中的,对待这种情况的处理方法如下:
#import <msxml4.dll>
using namespace MSXML2;
try
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocument2Ptr xml;
xml.CreateInstance(__uuidof(MSXML2::DOMDocument));
if(!xml->load(_bstr_t(m_sFilePath)))
return false;

int i= 1;
bool bNode = TRUE;
MSXML2::IXMLDOMNodePtr node;




_stprintf(strRoot,_T("/%s/%s/Property[%i]"),m_sRootNode,m_sSubNode,i);
i++;

node = xml->selectSingleNode(_bstr_t(strRoot));
if (node)
{
MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem;
node->get_attributes(&pAttrs);
}
}
catch(...)
{
return false;
}
请楼主试试  回复  更多评论
  
# re: 使用最原始的调用COM组件的方法 (转) 2010-12-02 11:02 | BirdsHover

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理