![]() |
1
7
您可以从anycpu dll执行p/invoke,只需要对p/invoke定义更加小心(即,您不会无意中假定为32位或其他类型)。问题是,很难知道第三方DLL是否在没有反射镜和分解它的情况下做了正确的事情(当然,除非开发人员特别声明64位支持)。 但除此之外,你还很在行。 老实说,对于99%的应用程序,以x86为目标是完全可以接受的。实际上,64位的应用程序数量相对较少。(性能问题通常是有点小问题的:更多的寄存器被x86模式的寄存器重命名和更大的数据结构所抵消,因为指针的大小是原来的两倍[在引用量更大的系统中,如.NET,情况更糟]) |
![]() |
2
7
我对你问题的这一具体部分很好奇。
所以我试了一下。我创建了一个DLL项目
Visual Studio没有对引用或生成应用程序发出警告或投诉。当我运行应用程序(在64位操作系统上)并加载ClassLibrary1程序集时,收到一个BadImageFormatException。 如果我将consoleapplication1更改为target x64,则会收到编译器警告,但编译成功,运行时也会发生相同的异常。 因此,为了回答您的问题,是的,如果您引用的程序集(或在运行时为此加载的任何程序集)也不是为任何CPU编译的,您很可能会遇到麻烦。如果你不确定,而且你不需要额外的地址空间,我会继续瞄准x86。如果您确定您的依赖项是为anycpu编译的,那么如果您愿意,您可以将anycpu作为目标,但一定要在两个处理器体系结构中进行大量测试。 |