我需要将一些遗留的32位代码(我没有源代码)集成到一个项目中,以便可以从64位.NET程序集中调用它。原始代码在DLL中实现为32位COM对象。 Windows不允许从64位到32位对象的直接调用,所以我正在寻找如何处理这种情况的灵感。
如何从64位.NET程序集访问旧版32位COM对象?
更新:我们发现COM组件本身就是一些ANSI C的包装器,我们为它提供了原始源代码。我们能够在Visual Studio中将其编译为本机64位dll,并将其导入.NET - 抱歉移动球门柱!
答案 0 :(得分:8)
最好的方法是创建一个包装32位DLL的进程外COM服务器。然后,您可以使用64位代码调用它。
答案 1 :(得分:3)
您需要做的是创建两个与IPC通信的进程。这样,一个可以是32位,一个可以是64位。您需要创建一个与COM对象链接的32程序,并通过某种IPC机制(如命名管道)公开其API。这样,您的.NET程序就可以从另一个进程访问它。
答案 2 :(得分:3)
查看此blog post。您可以使用运行时可调用包装器从64位.NET应用程序引用32位COM程序集。简短版本如下......
使用tlbimp.exe创建64位运行时可调用包装器:
tlbimp.exe foo.dll /machine:x64 /out:Interop.Foo.dll
如果您还没有注册COM程序集(而不是RCW):
regsvr32.exe foo.dll
从您的应用程序中引用RCW(例如Interop.Foo.dll
)。将构建配置更改为x64,让我们摇滚。