詳細的創建過程和調用可以參考
其中的註冊組件 regSvr32 Debug\$(TargetName).dll 較關鍵
現在簡單來看看註冊成功後,系統到底是把東西註冊到哪裏去了呢?
COM組件生成成功後,我們在.idl的文件中能看到這樣的東西
// ComDemo.idl : IDL source for ComDemo.dll
//
// This file will be processed by the MIDL tool to
// produce the type library (ComDemo.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(A106F235-02E7-4F05-8D08-2747C796549D),
dual,
helpstring("IHelloWorld Interface"),
pointer_default(unique)
]
interface IHelloWorld : IDispatch
{
[id(1), helpstring("method Show")] HRESULT Show(int iWhat);
};
[
uuid(B4AB42E7-49C1-456F-8DBE-53C51637CACF),
version(1.0),
helpstring("ComDemo 1.0 Type Library")
]
library COMDEMOLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(493D595A-C1AC-47B7-8A3E-90E40D711B52), //注意這個UUID
helpstring("HelloWorld Class")
]
coclass HelloWorld
{
[default] interface IHelloWorld;
};
};
我們創建的類叫 HelloWorld,它的uuid(493D595A-C1AC-47B7-8A3E-90E40D711B52),
我們可以拿着這個UUID到註冊表搜索,果不其然可以搜到以下結果:
先是找到我們的類HelloWorld
然後又找到了我們註冊動態庫的位置
OK,就不再深究了,結束!
(附上創建和調用Demo)