CComCritSecLock<CComCriticalSection> lock(_pAtlModule->m_csStaticDataInitAndTypeInfo, false);
像上面的代码在atlcom.h中,_pAtlModule 的值为空,没有初始化。
网上说可以通过添加类向导,然后选择 添加ATL支持到现有的MFC项目。
实际测试,发现老项目在添加时会失败。只有新建的MFC项目可以添加成功。
然后,添加的结果也不满意,多了一些不需要的东西。
1,添加了idl文件,会在编译时生成tlb库。
2,在资源中添加了tlb库,会将tlb库链接到程序资源中。
3,添加了rgs文件(注册表项目)。
4,会在调用com对象时进行自注册操作(将rgs导入注册表)。
上面这些都是我不想要的,我只是想干干净净的,让我实现的com对象可以正常调用传递参数就行了。
不需要在系统中注册com组件。
对过对比分析新的mfc项目添加atl支持后的代码,发现添加支持很简单。
在现有的cpp文件中添加如下代码即可。
[复制到剪贴板] |
class CMFCApplication1Module :public ATL::CAtlMfcModule
{
};
CMFCApplication1Module _AtlModule;
就像上面这样,定义一个atl的app类。
再实例一个对象即可。