在访问COM时,如何在x86和x64下编写C#代码是否安全?典型的陷阱?

时间:2010-03-11 10:35:53

标签: c# .net com x86 64-bit

我们使用用C#编写的开源库包装Windows BITS COM组件。但是,代码只能在x86模式下运行。我想通过使x86和x64都安全来为图书馆做出贡献,但是我对这个领域并不了解。

您能否在此列出好/坏做法,典型问题,原则等等,需要注意什么?

例如,我在代码IntPtr中看到的是System.Int32,它在x64上运行得不好。您将如何以平台无关的方式解决此问题和类似问题?

2 个答案:

答案 0 :(得分:2)

我认为你在谈论SharpBits.NET,它是BITS组件的包装器。是的,有几个地方作者弄乱了互操作。否则没有理由无法工作,BITS既可用作32位也可用作64位COM服务器。这种摸索的一个例子是this thread

使P / Invoke声明错误或不正确地手动编组是所有64位互操作问题中的绝大多数。我在this thread中留下了很多关于64位编码问题的提示。

答案 1 :(得分:1)

嗯,你不;)

严重。

问题是64位和32位com对象不能互操作,所以你肯定需要一些没有stron gbinding的延迟加载设置(然后我们不要说COM而是用IDispatch进行COM),或者两个不同的wrapepr程序集。

整个x86 / x64是一个非常重要的差距 - 因为它很难跨越。例如,yuo不能将32位DLL加载到64位进程中 - 无论是否包装,您都无法加载它。

MS故意以这种方式设计它。因此 - 没有办法绕过它。