C#学习教程:使用托管代码包装器从64位托管代码调用32位非托管代码的最佳方式随着64位计算机和应用程序的普及,从托管64位进程调用本机32位代码变得越来越频繁。我不想将我的应用程序标记为32位,我无法获得正在调用的代码的64位版本。我目前使用的解决方案是创建在进程外加载的C++COM垫片,以便从64位进程进行32位调用。这种COMshim解决方案运行良好,跨进程调用由COM在幕后处理,从而最大限度地减少了这种方法的开销。但是,我想保留我们在C#中所做的所有新开发,并想知道是否有任何框架可以最大限度地减少这样做的开销。我看过IPCChannel,但我认为这种方法不如COMshim解决方案那么巧妙。谢谢,Ed我遇到了同样的问题,我的解决方案是使用远程处理。基本上该项目包括:引用CalculatorRemote.dll的主平台独立C#库(例如Calculator.dll),其中一个Calculator类私下使用RemoteCalculator类的单例来调用所需的x32函数;x22控制台应用程序,它通过IpcChannel从CalculatorRemote.dll托管RemoteCalculator以供Calculator.dll使用。因此,如果主应用程序以x64模式启动,则会生成RemoteCalculator主机应用程序并使用远程RemoteCalculator实例。(在x32中,它只使用RemoteCalculator的本地实例。)棘手的部分是告诉计算器主机应用程序关闭。我认为这比使用COM更好,因为:几乎唯一的答案是进程外通信。您可以创建一个.NET项目,它是一个32位可执行文件,需要进行所有32位调用并通过Windows消息、WCF、命名管道、内存映射文件(4.0)等与其通信。我很确定Paint就是这样.NET在64位进程上执行WIA(Windows成像采集)。在PDN的情况下,他们只是传递他们期望的文件名作为输出,但更复杂的通信并不困难。根据您正在做的事情,这可能是更好的方法。以上就是C#学习教程的全部内容:使用托管代码包装器从64位托管代码调用32位非托管代码的最佳方式。注意——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
