在运行时在v110可执行文件中使用v90 COM dll是否安全
Is it safe to use at runtime a v90 COM dll in a v110 executable?
在使用v110编译器生成的可执行文件中使用使用v90编译器生成的COM dll是否安全?
v90 dll由可执行文件在运行时通过COM接口使用(它不是#import
ed)。
可执行文件根据dll的tlb生成。两者都静态链接到MFC,并且都使用运行库的/MT
版本。
我的理解是,这是可能的,但并不安全。由于存在关于使用的注意事项(即内存分配不同,因此对象不能在dll中分配,也不能在可执行文件中删除,因为这会导致意外行为)。
请有人帮我澄清一下好吗?
是的,它是安全的。只要你遵守COM规则。
COM规则是ABI1规则,包括与内存管理、线程等相关的规则。
永远不要试图颠覆这些规则。
即使dll和exe使用相同的编译器。例如,不要将new
放在一边,将delete
放在另一边进行分配,即使使用相同的编译器也是如此。
COM不会限制或强制任何一方使用特定的语言或平台-有许多技术、语言和平台提供COM互操作性,例如,只要双方都遵守规则,在.Net中实现的COM对象将与导入该对象的C++exe一起工作。
1应用程序二进制接口
相关文章:
- 如何将从控制台应用程序C++回调设置为C++ COM DLL
- 使用线程 C# 中的 VC++ 6.0 COM DLL
- 如何调试 COM DLL
- C++ 安全数组在从 c# COM dll 返回时具有无效数据
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 可视化 使用 C++ API 注册 COM DLL 的所有接口
- 如何返回包含来自com dll的多个空字符的BSTR
- 无法追加到 COM Dll 中的字符串 奇怪的行为
- 当InProcServer32键定义DLL的完整路径时,path环境变量中为什么需要COM DLL的路径
- 合并 c 可执行文件、托管 COM dll 和 .Net GUI
- 删除/编辑 ATL COM DLL 属性/方法
- 如何在不同的目标平台上以编程方式智能注册 32 位 COM/DLL 组件
- 客户端正在获取从C++COM dll返回的字节数组
- 在运行时在v110可执行文件中使用v90 COM dll是否安全
- Calling C# COM DLL from C++
- #导入COM DLL生成错误的方法签名
- C# COM-Interop dll for C++ COM dll 在 2 个解决方案之间不起作用
- 如何查找所有应用程序的COM dll
- 如何从C++非 COM dll 调试C++ COM dll
- 没有DllRegisterServer等的COM dll