C++/CLI 64 位 COM

发布于 2024-09-18 06:34:20 字数 171 浏览 5 评论 0原文

我有一个包装本机 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

埖埖迣鎅 2024-09-25 06:34:20

不,您不能在 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.

一指流沙 2024-09-25 06:34:20

从某种意义上来说,是的。

继续将 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文