作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一个指向无符号长数组的指针(处理数据),然后将它发送回 C#
在 C# 中
[DllImport("some_dll.dll")]
private static extern uint[] func(uint[]x, uint[]y, uint[]z);
C header
_declspec(dllexport) unsigned long* _stdcall func(unsigned long[],
unsigned long[],unsigned long[]);
错误
MarshalDirectiveExceptionCannot marshal 'return value': Invalid managed/unmanaged type combination
请告诉我是什么导致了这个问题。
最佳答案
该消息意味着 p/invoke 编码器无法将该返回值编码为 uint[]
。
在我看来,您有以下选择:
IntPtr
。然后在托管端,您需要将内存复制到 C# 代码中分配的 uint[]
中。您可以使用 Marshal.Copy
来做到这一点。您需要以某种方式找出数组的长度。您还需要处理重新分配。您的 C# 代码无法做到这一点。因此它将不得不调用 native 代码中的另一个函数并要求 native 代码解除分配。uint[]
。您不使用函数返回值,而是将 uint[]
作为参数传递。这需要调用代码(C# 代码)知道数组需要多大。如果您可以选择选项 2,则会导致界面两侧的代码更简单。我的猜测是返回数组的长度与输入数组的长度相同。在这种情况下选择选项 2。
关于c# - 将无符号长数组作为 uint[] 从 C dll 返回到 C# 为什么抛出 MarshalDirectiveException 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14013920/
我在使用 C# 为 iPhone 构建应用程序时发现了此错误。这个应用程序有一个插件,可以将 System.Object 实例传递给 c。我得到了这个,但我不确定缺少哪一部分! 这是 C# 代码: p
当我运行 GetBoard 方法时出现以下异常(但方法 Initialize 工作正常): System.Runtime.InteropServices.MarshalDirectiveExcepti
我有一个 cpp 项目(创建 test.DLL)和一个 C# win 窗体项目(使用 test.DLL)。如何将 C++ 字典转换为 .net 字典? 我尝试了这段代码,但我得到了一个 unhandl
我正在使用一个指向无符号长数组的指针(处理数据),然后将它发送回 C# 在 C# 中 [DllImport("some_dll.dll")] private static extern uint[]
我是一名优秀的程序员,十分优秀!