使用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始终是没有创建成功,因此下面使用其它函数也就出错了。
请问该怎么弄?
...全文
395 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 ??

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧