【发布时间】:2011-03-24 14:53:21
【问题描述】:
我将 C++ dll 导入到 C# 项目中,在 x64 机器上,在调试模式下,PInvoke 抱怨托管签名与非托管目标签名不匹配。
C++:
void _Foo(signed long int x);
C#:
[DllImport("foo.dll", EntryPoint="_Foo"]
public static extern void Foo(int x)
将 C# 代码中的 int 替换为 IntPtr 或 Int64 并不能解决问题。
有什么建议吗?
【问题讨论】:
-
pinvoke 的确切错误是什么?我认为您在这里问错了问题(我回答了您提出的问题,但对您没有帮助)。
-
正是拉里,我有一个类似的答案,但被标记了。 >:(
-
我最好的猜测是这实际上是编译为 32 位的。 EntryPoint 属性是错误的,它是 __Foo(两个下划线)。 CallingConvention 也不见了。没有发布确切的错误消息是一个错误。
标签: c# marshalling managed