C++ 如何在VisualStudio2008中创建COM DLL?
我很久没有写过COM dll了。我现在已经创建了几个类,它们继承了一些COM接口,但我想测试一下。我知道我必须在某个地方放置一个GUID,然后将其注册到regsvr32,但是需要执行哪些步骤C++ 如何在VisualStudio2008中创建COM DLL?,c++,visual-studio-2008,com,dll,guid,C++,Visual Studio 2008,Com,Dll,Guid,我很久没有写过COM dll了。我现在已经创建了几个类,它们继承了一些COM接口,但我想测试一下。我知道我必须在某个地方放置一个GUID,然后将其注册到regsvr32,但是需要执行哪些步骤 编辑:对不起,忘了提到我用C++。< p>当你构建解决方案时,它自动注册DLL。 它还创建了两个文件_i.c和.h文件 要测试dll,请创建示例应用程序: 创建示例Win32应用程序。在具有main函数的win32应用程序的cpp文件中包含_i.c和.h 调用CoInitialize() 声明接口指针 CC
<>编辑:对不起,忘了提到我用C++。< p>当你构建解决方案时,它自动注册DLL。 它还创建了两个文件_i.c和.h文件 要测试dll,请创建示例应用程序:
辅类
要创建新的ATL COM项目,您可以按以下步骤进行:
PPS:如果您希望您的dll支持MFC,那么您必须选择MFC/MFCDLL,而不是选择ATL项目。添加ATL简单对象时,向导将要求向项目添加ATL支持。您需要编写一个名为的函数并将其导出。该函数负责分配一个“类工厂”,您还必须编写该工厂,该工厂反过来能够分配COM对象的实例。它必须实施 这不难做到。另一种选择是使用ATL(参见xhantt的答案),理论上它可以为您实现这一点,但实际上它真的是一团糟。不知何故,它设法将COM的复杂性封装在一个更复杂的抽象层中。例如,尝试在DLL之间移动对象会带来好运 但是您可以运行ATL向导来查看如何声明
DllGetClassObject
的示例。实现IClassFactory
非常简单——这只是一种向对象发送消息的方法
然后你需要注册你的动态链接库,也就是说,把键放入注册表。没有您的进一步帮助,regsvr32
工具无法执行此操作。您必须编写并导出另一个名为的函数,它完成所有的艰苦工作。regsvr32
所做的就是加载DLL,查找DllRegisterServer
并调用它
同样,ATL有一种方法可以为您实现这一点,但它是通过读取一种充满注册表修改指令的脚本来实现的,该脚本存储在嵌入DLL资源的.rgs文件中。如果您不小心将任何类型的语法错误放入此文件,则注册将以静默方式失败
同样,您可能会发现自己编写几行代码来调整注册表更简单
如果改用C#,就不会有这些问题。一切都封装得很干净。它实际上比C++开发COM对象的工具要好得多。我建立了一个BOG标准Win32项目,没有包含ATL/MFC。我需要知道如何设置项目设置以使其正确构建为COM dll。您可以参考以下链接或IClassFactory2?