gpt4 book ai didi

visual-studio-2010 - 如何从针对 64 位机器的 VS 2010 解决方案调用 32 位 COM 互操作 dll

转载 作者:行者123 更新时间:2023-12-04 05:51:12 34 4
gpt4 key购买 nike

我正在使用 c# 开发 Windows 客户端应用程序,在我的 VS 2010 解决方案中有两个项目,启动项目和一个使用第三方 COM 互操作 DLL 的类库。我的桌面是 64 位的,所有客户端机器都是 64 位的好。

如果我将启动项目保留为(build设置)中的任何 cpu 和调用 COM DLL 的第二个项目的 x86,我将收到以下错误:

Could not load file or assembly ... or one of its dependencies. An attempt was made load a program with an incorrect format.

如果我将两个项目都保留为 Any cpu,则会收到以下错误:
Retrieving the COM class factory for component with CLSID .. failed due to the following error:
知道如何在不将解决方案(所有项目)转换为 x86 的情况下解决问题。

最佳答案

好吧,我建议你看看DLL surrogates .这个技巧肯定会解决你的问题,但前提是你可以在注册表中更改 DLL inrpoc 服务器的注册信息。
如果该类被配置为使用代理,它将在单独的进程中运行。 COM 允许从 64 位应用程序使用进程外 32 位 COM 服务器。

您需要更改的所有内容如下所示:

查看注册表中的以下条目:

HKCR\CLSID\{CLSID_CoClass}

看看它是否有 AppID 字段。如果是这样,只需访问此注册表项:
HKLM\Software\Classes\AppID\{APPID}

并添加没有值的 DllSurrogate 字符串键。

如果该类没有关联的 AppID,您可以自己创建它。然后,您可以使用来自 64 位目标 .net 应用程序的 32 位 inproc 库。

关于visual-studio-2010 - 如何从针对 64 位机器的 VS 2010 解决方案调用 32 位 COM 互操作 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017681/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com