【发布时间】:2021-12-24 19:29:35
【问题描述】:
我对 C# 和 C/C++ 非常陌生。我用 C 编写了一个代码,将 2 个变量存储在一个数组中并返回该数组。使用 P/invoke 方法,我创建了这个 C 函数的 DLL 库并将该库导入 C#。在调用数组时,我无法从 C# 中获取数组。 需要你的帮助。这是C代码
#include <stdio.h>
extern __declspec(dllexport) int* sum();
int* sum()
{
int a = 50, b = 80, sum, neg;
sum = a + b;
neg = b - a;
int arr[2] = { sum, neg };
return arr;
}
现在 C# 代码是...
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication
{
class Program
{
[DllImport("Project2.dll")]
unsafe public static extern int* sum();
static void Main(string[] args)
{
unsafe
{
int* array2 = sum();
Console.WriteLine("Value: " + array2[0]);
}
}
}
}
请告诉我如何获取数组。
【问题讨论】:
-
在 C 或 C++ 中返回一个数组比这更复杂。您将该数组声明为
sum中的局部变量。sum退出时不存在 -
看起来像 Marshal C++ int array to C# 和/或 Return array of integers from cross-platform DLL 的副本,同意吗?虽然如果你真的只有两个整数要返回,用这两个值编组一个结构可能很容易。参见例如Marshaling byval C-structure as return value in C#.
标签: c# dll pinvoke marshalling dllimport