收录日期:2018/05/25 16:51:42 时间:2016/05/20 18:27:09 标签:ATL/ActiveX/COM
潘爱民老师的<com原理与应用>的第五章例子,就是没有类型库。我想如果再vc下测试,肯定没有问题的。我希望再vb下测试,但vb需要类型库。

// 接口ID
// {B15C0B13-6EA7-4edb-BE15-B4082542F9EA}
extern "C" const IID IID_ITestComWithMFC = 
{ 0xb15c0b13, 0x6ea7, 0x4edb, 
{ 0xbe, 0x15, 0xb4, 0x8, 0x25, 0x42, 0xf9, 0xea } };

IMPLEMENT_OLECREATE(CTestComWithMFC, "HeHe.TestComWithMFC", 
0xa85270af, 0x79ee, 0x42bd,  0xa2, 0xfe, 0x18, 0x31, 0xfe, 0x0, 0x66, 0xea)
那位能告诉我IMPLEMENT_OLECREATE宏指定的是什么guid吗 ? 类厂的,还是组件clsid
我试着这样写
[
object,
uuid(B15C0B13-6EA7-4edb-BE15-B4082542F9EA)
]
interface ITestComWithMFC : IUnknown
{
HRESULT Test();
};


// This file will be processed by the MIDL compiler to produce the
// type library (HeHe.tlb).

[ uuid(ED365958-619E-440A-B469-8167ABEB8404), version(1.0) ]
library HeHe
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[ uuid(a85270af-79ee-42bd-a2fe-1831fe0066ea) ]
coclass TestComWithMFC
{
[default] interface ITestComWithMFC ;
};


//{{AFX_APPEND_ODL}}
//}}AFX_APPEND_ODL}}
};

假定IMPLEMENT_OLECREATE宏指定的是组件clsid,但是运行通不过
up~~
问题已经解决。原来例子只是vtable接口,不支持分发接口。
只要如下调用就可以:
Dim h As HeHe.TestCom
set h = new HeHe.TestCom

h.Test