使用com组件的问题

gnuljf 2007-01-16 01:37:08
想使用按键精灵内的“QMDispatch.dll”部分功能,这个是一个com组件,使用MFC类向导添加进工程,然后使用时出问题。
CQMFunction obj;
COleException *e = new COleException;
obj.CreateDispatch((LPCTSTR)"QMDispatch.QMFunction",e);
long x=obj.GetScreenResolution();
在上面的代码中,obj始终是没有创建成功,因此下面使用其它函数也就出错了。
请问该怎么弄?
...全文
370 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ouyh12345 2007-01-17
在程序入口处放CoInitialize(NULL);
  • 打赏
  • 举报
回复
DragonBill 2007-01-17
在哪里用该组件就在哪里CoInitialize(NULL);
  • 打赏
  • 举报
回复
gnuljf 2007-01-17
我只是很偶尔的会自己编一点自己用的很小的东西,能够解决目前遇到的问题就足够了,我编写东西都完全是业余爱好。我也没心思没时间再去专门学习这些东西。
  • 打赏
  • 举报
回复
Juchiyufei 2007-01-17
劝你还是去看一下com吧

否则日后出现了问题你又要上来问,就把这次当作是学com的一个机会吧,并且也有动力.
  • 打赏
  • 举报
回复
Juchiyufei 2007-01-17
你强.

.........
  • 打赏
  • 举报
回复
gnuljf 2007-01-17
妈的,找到问题所在,obj.CreateDispatch((LPCTSTR)"QMDispatch.QMFunction",e);这句不能用(LPCTSTR)强制转换,而应该使用obj.CreateDispatch(_T(QMDispatch.QMFunction"),e);问题解决,散分。
  • 打赏
  • 举报
回复
gnuljf 2007-01-17
老实说确实没使用::CoInitialize(NULL),对com我也确实还完全不懂,::CoInitialize(NULL)应该在哪里使用?我放在#include "CQMFunction.h"或者放在CQMFunction.h中语句#import "C:\\windows\\QMDispatch.dll" no_namespace下面在编译时就提示错误:
error C2365: “CoInitialize”: 重定义;以前的定义是“函数”
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

我在网上看到一个例子CoInitialize(NULL)是放在#import下面的,但是却编译错误。放在CQMFunction obj;下面的话,CoInitialize(NULL)的返回值为0,也就是S_OK,从MSDN上看,如果返回S_OK应该就是初始化成功了,但是接下来还是跟以前一样的错误。用GetLastError得到的是0。

有没有哪位朋友能够写个完整的能正常使用的代码来?
  • 打赏
  • 举报
回复
yjgx007 2007-01-16
GetLastError看是什么错误代码
  • 打赏
  • 举报
回复
armyz1980 2007-01-16
用::CoInitialize(NULL)进行COM初始化了吗?
包装类的头文件添加上了吗?
obj.CreateDispatch((LPCTSTR)"QMDispatch.QMFunction.1",e);
程序ID加上版本号试试.
看看COleException抛出的异常.
  • 打赏
  • 举报
回复
Kudeet 2007-01-16
CoInitialize(NULL); ?
  • 打赏
  • 举报
回复
wildmen 2007-01-16
obj = NULL ??
  • 打赏
  • 举报
回复
发帖
ATL
加入

3231

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
申请成为版主
帖子事件
创建了帖子
2007-01-16 01:37
社区公告
暂无公告