求一个引用com组件的问题

纵横车 2016-11-10 09:10:50
问题是这样的,
首先我写了一个极简单的com组件TestCom1,里面有一个接口ComInterface。
然后我想在另一个控制台工程里使用这个组件,但是出错,具体的我错误情况我写到下面的注释里了。

生成接口的时候是这样填的


引用组件的代码
#include <stdio.h>
#include <atlbase.h>
#include <atlcom.h>
#import "D:\Users\V\Documents\VisualStudio2010\Projects\TestCom1\bin\TestCom1.dll" no_namespace

int _tmain(int argc, _TCHAR* argv[])
{

CoInitialize(NULL);
CLSID clsid;

//主要就是这一步出错,一直获取不到有效的clsid
//CLSIDFromProgID的参数试过TestCom1.ComInterface,TestCom1.ComInterfaceID,TestCom1.IComInterface等,
//均无法获得有效clsid
CLSIDFromProgID(OLESTR("IComInterface"), &clsid);


CComPtr<IComInterface> pGetRes;
pGetRes.CoCreateInstance(clsid);

CoUninitialize();

getchar();
return 0;
}


然后用OLEView查看组件是这样的
// Generated .IDL file (by the OLE/COM Object Viewer)
//
// typelib filename: TestCom1.dll

[
uuid(F6B199A9-6576-4923-8421-52505A2E85A4),
version(1.0)
]
library TestCom1Lib
{
// TLib : // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");

// Forward declare all types defined in this typelib
interface IComInterface;

[
uuid(A0F40F1A-0545-4538-A4C2-F164AD9FBB5C)
]
coclass ComInterface {
[default] interface IComInterface;
};

[
odl,
uuid(453187A9-01AC-467E-8CD5-10C5B7E460C2),
dual,
nonextensible,
oleautomation
]
interface IComInterface : IDispatch {
[id(0x00000001)]
HRESULT Hello([out] long* result);
};
};
...全文
548 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2016-11-10
  • 打赏
  • 举报
回复
ProgID 不是明明写着 ComInterfaceID 么, 你写的是虾米东东... 为什么不直接写 __uuidof(ComInterface) 或者直接用 A0F40F1A-0545-4538-A4C2-F164AD9FBB5C 就是了...

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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