C++/CLI 64 位 COM
我有一个包装本机 32 位 dll 的 C++/CLI 程序集。
该程序集可在 .Net 和 COM (office) 中使用。
现在我有一个运行 64 位 Office 的客户。
是否可以创建使用本机 32 位 dll 并导出 64 位 com 接口的 C++/CLI 程序集?
I have a C++/CLI assembly that wraps a native 32-bit dll.
The assembly is used both from .Net and COM (office).
Now I have a customer that runs 64-bit office.
Is it possible to create a C++/CLI assembly that uses a native 32-bit dll and exports a 64-bit com interface?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,您不能在 Windows 上的一个进程中混合具有不同位数的代码。您需要将 32 位代码强制放入单独的进程中或转换该 DLL。
后者可能可以通过使用 COM+(或大部分相同的 DCOM)来实现。这就是我们通常对本机 C++ 代码所做的事情。我不确定使用 C++/CLI 程序集有多容易。
No, you can't mix code with different bitness in one process on Windows. You need to force 32-bit code into a separate process or convert that DLL.
The latter can likely be achieved by using COM+ (or DCOM which is mostly the same). This is what we usually do with native C++ code. I'm not sure about how easy it is with C++/CLI assemblies.
从某种意义上来说,是的。
继续将 C++/CLI 代码编译为 32 位,以便它可以通过 C++ 互操作来使用本机库。
然后,您必须将其配置为在充当 Office 64 插件时作为进程外 COM 服务器加载。使用本机 COM 代码,midl 自动生成 64 位代理。在注册标记为
COMVisible
的 .NET 类时,应该有一些类似的功能来创建代理。64 位 COM 接口将包含在自动生成的 64 位代理 DLL 中,因此这不会违反进程中所有模块的位数必须相同的规则。
In a manner of speaking, yes.
Continue to compile the C++/CLI code as 32-bit so it can use the native library using C++ interop.
Then you will have to configure it to load as an out-of-process COM server when acting as an Office 64 plugin. With native COM code, midl automatically generates the 64-bit proxy. There should be some similar capability to create a proxy when registering .NET classes marked
COMVisible
.The 64-bit COM interface will be contained in the auto-generated 64-bit proxy DLL, so this doesn't violate the rule that the bitness of all modules in a process must be the same.