【问题标题】:Marshalling int* to C#将 int* 编组为 C#
【发布时间】:2012-06-21 18:18:28
【问题描述】:

我在 C++ void someFunc(char* arg1, int* arg2) 中有一个函数,当我在 C# 中使用这个函数时(在导入 DLL 之后),我想封送参数。

你能告诉我我应该如何编组,因为我在这里很困惑。

[DllImport(Dllname)]
extern void someFunc([MarshallAsAttribute(UnmanagedType,LPStr)] string arg1, IntPtr arg2);

我应该在这里使用 IntPtr 吗?我不能从 C# 传递任何 int 变量的地址,这样它就会落在 C++ 的指针中?

【问题讨论】:

  • 您实际上可以在 C# 中使用本机指针,使用不安全的代码块。虽然我不推荐它,因为它会导致 API 不直观。
  • 您需要描述这些指针的含义。特别是它们也指向多少数据,如果函数在返回后保留指针,以及如果您想将null 传递给它们。

标签: c# c++ marshalling


【解决方案1】:

问题是int* 可用于 C 中的许多不同场景。如何编组这取决于int* arg2 的含义。

例如,如果它只是设置一个 int 值,您可以将其编组为 ref int。但是,如果 int* 表示一个数组,则您需要传递一个数组(但这不太可能,因为没有长度项,这在通过指针使用数组时很常见)。

【讨论】:

  • char* 则更加模棱两可。
  • @CodeInChaos 是的 - 任何指针类型都有这个问题。你总是需要知道原生端打算用这个变量做什么。
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2014-05-18
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
相关资源
最近更新 更多