为什么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。所以问题似乎只是在参考添加过程中。
接下来会尝试手动生成互操作。
答案 0 :(得分:1)
它是绝对相同的COM服务器,而不是32对64位版本?您所描述的具有针对不同位的所有标志,您可能知道 - 在32位编译目标中ULONG_PTR是32位,在64位编译目标中是64位,但是本机代码在编译时必须是一个或另一个
名义上的“正确”翻译将是UIntPtr
,但这会浮动,具体取决于.NET客户端进程运行的框架,而不是COM服务器的位数。