我有一个C ++ .DLL和C#应用程序。在DLL中我有一个像:
这样的函数 namespace Sample
{
public ref class SampleClass
{
public:
int f(int arr[], int length);
};
}
如何从C#应用程序中调用它?问题是在C ++中我只能使用int*
参数而不能在c#中声明int[]
和int[]
变量。
我曾尝试在C#中声明int*[]
类型,但由于
无法获取托管类型的地址
错误。我不知道如何将数组放入此函数中。
UPD: 试图像
那样痴迷[DllImport("samplelib.fll", EntryPoint = "Sample.SampleClass.f")]
但这似乎是错误的。
答案 0 :(得分:0)
我不确定,如果这是你想要的。你的例子似乎有点不完整......
让我们说你在C / C ++中有这样的东西:
void TakesAnArray(int size, int array[]) {
printf_s("[unmanaged]\n");
for (int i=0; i<size; i++)
printf("%d = %d\n", i, array[i]);
}
然后你想从C#调用ist,所以你创建了一个包装类。
internal static class NativeMethods
{
[DllImport("SomeLib.dll" )]
public static extern void TakesAnArray(int size, [In, Out] int[] array);
}
答案 1 :(得分:0)
int[] arr = new int[10];
int ptrsize = arr.Length * Marshal.SizeOf(typeof(int));
IntPtr arrptr = Marshal.AllocHGlobal(ptrsize);
Marshal.Copy(arr, 0, arrptr, ptrsize);
NativeFunction(arr.Length, arrptr);
//after
Marshal.FreeHGlobal(arrptr);
将数组用作指针
void NativeFunction(int length, int* array) { /*...*/ }
导入(。\\是可执行路径)
[DllImport(".\\MyLib.dll")]
static extern void NativeFunction(int length, IntPtr array);