【问题标题】:C# - return type int* from unmanaged codeC# - 从非托管代码返回类型 int*
【发布时间】:2014-08-29 10:10:19
【问题描述】:

我正在编写一个小型应用程序以通过 API(均为 64 位)与外部设备通信。我从我尝试使用的指南中得到了以下方法:

int* GetRevision( void* cu_ptr, int num)

我试着做PinVoke模式:

[DllImport("ABCAPI.dll")]
public static extern IntPtr GetRevision(IntPtr cu_ptr, int num);

我尝试将 IntPtr 复制到一个 int 数组:

var check = GetRevision(device_cu_ptr, 1);
int[] arr = new int[10];  
Marshal.Copy(check, arr, 0, arr.Length);

有没有更好的方法在 c# 中将 INT* 转换为 Int[]?还是我的代码有错误?

【问题讨论】:

  • 你的最后一句话暗示了这个代码不起作用的事实。如果是这样,你能解释一下为什么不是吗?
  • @PaulZahra:也找到了,但不,不是骗子。这主要是关于误解,而不是如何解决它。
  • 您正在返回一个指向 int 的指针,而不是 int 本身。阅读:stackoverflow.com/questions/2699534/how-to-convert-int-to-int
  • 如果您不知道,您如何期望 我们 知道?拿起电话给编写 C 代码的程序员打电话。

标签: c# arrays api unmanaged


【解决方案1】:

好的,Marshal.Copy 似乎是转换这些数据类型的正确方法。

var check = GetRevision(device_cu_ptr, 1);
int[] arr = new int[10];  
Marshal.Copy(check, arr, 0, arr.Length);

【讨论】:

    猜你喜欢
    • 2014-09-14
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2011-10-30
    • 2013-12-29
    相关资源
    最近更新 更多