gpt4 book ai didi

c# - 从返回 int 的非托管代码中获取外部函数是否安全

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:46:35 26 4
gpt4 key购买 nike

[DllImport(MyUnmanagedLibrary, CallingConvention = CallingConvention.Cdecl)]
internal static extern int MyFunction();

假设这是我从非托管 C++ 库导入的函数。在这种情况下,外部函数被声明为返回一个 intint 的大小在托管 C# 代码中不会改变,但它会根据非托管 C++ 代码中的体系结构而改变。假设它返回一个 int 是否安全?我应该使用 IntPtr 作为返回值吗?还是别的?

最佳答案

int 在 C# 中是并且将永远是 System.Int32,关键是每个 C++ 编译器(理论上)都可以自由地使用类型大小做任何它想做的事情(在一定限度内),因此,如果您想避免不匹配,您应该更改代码的 C++ 端,使其返回一个固定大小的整数(例如 int32_t)。 IntPtr 无能为力,因为 int 没有定义为具有指针的大小(实际上,在 x86_64 Windows 上 int 是 32 位,而int * 是 64 位)。

另一方面,x86 Windows 上的任何编译器极不可能int 定义为不同于 32 位 2 的补码整数的任何东西,对于明显的二进制兼容性原因。

关于c# - 从返回 int 的非托管代码中获取外部函数是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com