对于一个ATL(MFC supported) DLL 工程,创建两个ATL对象A和B,我希望当此ATL-DLL被加载时就自动实例化一个对象A,故在CMyATLApp中添加了:CComPtr<IA> theA;并在InitInstance()中添加: theA.CoCreateInstance(CLSID_A);
一切都很顺利并进行了客户端的测试.直到:
我用regsvr32在另一台PC上注册,发现失败.
分析原因,得出:
在执行regsvr32时,要进入InitInstance(),而此时(之后才是DllRegisterServer)组件还未注册,theA.CoCreateInstance(CLSID_A)自然失败.
那么:对theA的实例化应放到那里呢?
一切都很顺利并进行了客户端的测试.直到:
我用regsvr32在另一台PC上注册,发现失败.
分析原因,得出:
在执行regsvr32时,要进入InitInstance(),而此时(之后才是DllRegisterServer)组件还未注册,theA.CoCreateInstance(CLSID_A)自然失败.
那么:对theA的实例化应放到那里呢?
两者的建议和想要达到的效果还是有距离.为了把距离缩近,说说vb中的实现(相...当...的...简单):
创建一个ActiveDLL工程,建立两个类CA,CB;添加一个module,并声明一个CA对象:public objCA as new CA.
这样这个objCA便可以在整个工程中使用,是一个在此COM被加载时自动被创建的全局对象.