C++ 的 C# 等效项“有符号长整型”
我将 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
并不能解决问题。 有什么建议吗?
I import a C++ dll into a C# project and, on a x64 machine, on debug mode, PInvoke complains that managed signature does not match the unmanaged target signature.
C++:
void _Foo(signed long int x);
C#:
[DllImport("foo.dll", EntryPoint="_Foo"]
public static extern void Foo(int x)
Replacing int
in the C# code with IntPtr
or Int64
didn't solve the problem.
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它是System.Int32。也称为“int”。
It's System.Int32. Also known as "int".
C++ 中的
long int
== C# 中的int
。两者都是 4 字节长。 C++ 中的long long
== C# 中的long
。 (8 字节)。正如 Larry 上面所说,如果它发现类型不匹配,那不是因为 int。
A
long int
in C++ ==int
in C#. Both are 4 bytes long. Along long
in C++ ==long
in C#. (8 bytes).As Larry above says, if it is picking up a type mismatch, it is not because of the int.