对于一个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的实例化应放到那里呢?

解决方案 »

  1.   

    一般ATL都是在HRESULT FinalConstruct()中构建对象的,试试
      

  2.   

    这厢谢过wanilyer(缘随影去)和xiaoyuzi(小鱼子)的回复先.
    两者的建议和想要达到的效果还是有距离.为了把距离缩近,说说vb中的实现(相...当...的...简单):
    创建一个ActiveDLL工程,建立两个类CA,CB;添加一个module,并声明一个CA对象:public objCA as new CA.
    这样这个objCA便可以在整个工程中使用,是一个在此COM被加载时自动被创建的全局对象.
      

  3.   

    那你在VB中在实例化A也一样的啊,干吗要它自己实例化呢。