Interop汇编指针长度

时间:2009-12-05 23:32:16

标签: .net com pointers interop 64-bit

为什么Visual Studio有时会将COM库中的SAME指针参数转换为uint,有时转为ulong?我有一个COM库,其中包含一些参数,如

[ in ] ULONG_PTR ParentWindow

当我在台式计算机上引用此库时,互操作程序集会将ULONG_PTR转换为uint。当我在笔记本电脑上执行相同操作时,它会变为ulong。这在机器之间共享项目时会导致问题。我可能可以将Interop程序集与SVN一起存储在项目的其余部分中,但是如果我在更新COM库之后需要重新生成它,则会导致问题。

系统是:

Desktop                                Laptop
- Windows Vista Professional 64-bit    - Windows 7 Ultimate 64-bit
- Visual Studio 2008 Professional      - Visual Studio 2008 Team System
  (SP1)                                  Development Edition (SP1)
- .Net Framework 3.5 SP1               - .Net Framework 3.5 SP1

启用了UAC,Visual Studio以管理员身份运行。

我会尝试在笔记本电脑上应用Visual Studio 2008 SP1,以防有任何影响。

编辑:在笔记本电脑上应用SP1无效。

更新

在Visual Studio中添加对COM库的引用时,Process Monitor会在桌面计算机上显示devenv读取COMLibrary.dll,同时在笔记本电脑上读取COMLibrary64.dll。这肯定是桌面显示uint指针而笔记本电脑显示ulong的原因。

现在为什么要这样做?两台计算机上的Devenv进程都在WoW64下运行。

运行程序时,它根据Process Monitor在两台计算机上使用COMLibrary64.dll。所以问题似乎只是在参考添加过程中。

接下来会尝试手动生成互操作。

1 个答案:

答案 0 :(得分:1)

它是绝对相同的COM服务器,而不是32对64位版本?您所描述的具有针对不同位的所有标志,您可能知道 - 在32位编译目标中ULONG_PTR是32位,在64位编译目标中是64位,但是本机代码在编译时必须是一个或另一个

名义上的“正确”翻译将是UIntPtr,但这会浮动,具体取决于.NET客户端进程运行的框架,而不是COM服务器的位数。