如题目所示,我用evc++编写的exe如何调用evc++编写的COM组件?
解决方案 »
- 平台问题
- 关于类的成元函数定义为static的问题
- 关于重写CButton类的问题, 谢谢.
- 请问在CListCtrl里面如何居中显示图片
- 兑现承诺!http://community.csdn.net/Expert/topic/3754/3754471.xml?temp=.2292292
- 【原创】介绍SmartPrinter(虚拟打印机)
- 怎样在多文档view中添加工具栏?
- 为什么通过socket传输(大)文件时最好用阻塞方式?
- 怎样为二维数组每一个元素标记不同的值?
- 一个坐标映射问题?
- 请问现在开发一个ActiveX控件的价钱大概是多少?
- 图形数据转换类型问题,请大家帮忙,和vector有关:),先谢谢了
我以前在VC++中使用#import把COM的.tlb包进来就可以了。
但是现在用#import不行了,我把COM接口类的.h文件包进来,
再把atlbase.h文件也包进来,使用CComPtr类模板定义一个模板类,
但是调用.CoCreateInstance函数创建实例不成功,请问是什么原因呀?
我有一个接口叫ITestComDrv,我使用下面的代码创建接口对象。CComPtr<ITestCOMDrv> m_pTestComDrv;
HRESULT hr = m_pTestComDrv.CoCreateInstance( __uuidof(ITestCOMDrv) );
if ( FAILED(hr) )
{
::MessageBox(NULL, _T("Create instance fail."), NULL, MB_YESNOCANCEL | MB_ICONWARNING);
return FALSE;
}创建的结果是不成功,请问正确的写法应该是什么样子的?
请帮帮小弟,谢谢!!
hr = ::CoCreateInstance(CLSID_TestCOMDrv,
NULL,
CLSCTX_ALL,
IID_ITestCOMDrv,
(void **)&pTestComDrv);试试,另外你返回的错误码是什么啊
CLSID和IID,是不是还要包一些文件?--------------------Configuration: TestCOMRPC - Win32 (WCE emulator) Debug--------------------
Compiling...
TestCOMRPC.cpp
TestCOMRPCDlg.cpp
Generating Code...
Linking...
TestCOMRPCDlg.obj : error LNK2001: unresolved external symbol _CLSID_TestCOMDrv
TestCOMRPCDlg.obj : error LNK2001: unresolved external symbol _IID_ITestCOMDrv
emulatorDbg/TestCOMRPC.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.TestCOMRPC.exe - 3 error(s), 0 warning(s)
__uuidof(ITestCOMDrv) 等于 IID_ITestCOMDrv
__uuidof(TestCOMDrv) 等于 CLSID_TestCOMDrv
__uuidof(TestCOMDrv),
m_pIUnK,
CLSCTX_INPROC_SERVER,
__uuidof(ITestCOMDrv),
(LPVOID *)&m_pIUnK);
if ( FAILED(hr) ) return FALSE;hr = m_pIUnK->QueryInterface(
__uuidof(ITestCOMDrv),
(LPVOID *)&m_pITestComDrv);
if ( FAILED(hr) ) return FALSEldsjlzy(小李)大哥,我使用__uuidof之后,编译OK了,运行的时候,CoCreateInstance成功了,但是下面的QueryInterface调用返回失败,是什么原因?是不是我的ITestComDrv接口没有注册呀?
HRESULT hr = ::CoInitialize(0);
而且wince是不支持::CoInitialize(0);的。
对wince不同设备厂商可能对com的支持不一样.(虽都是ms的库)
注册的话用ce下的跟pc不一样,用DllRegisterServer注册吧
还要看你的设备是不是支持该函数,把机器上的ole32.dll拷到pc上,
命令行敲入link /dump /exports ole32.dll列出看是否支持你所用的API