包括C DLL和C#

包括C DLL和C#,c#,c,dll,C#,C,Dll,我已经编写了一个C DLL,并试图将其集成到一个C#WPF程序中 我相信我就快到了,但是DLL中有一些函数我在C#中指定时遇到了困难 包含DLL的方式是: [DllImport("GyroLib.dll")] 该图书馆拥有大约30项功能。如果我只列出其中的一些,那么一切都可以编译和构建,例如: [DllImport("GyroLib.dll")] public static extern double getRoll(); public static extern double getHead

我已经编写了一个C DLL,并试图将其集成到一个C#WPF程序中

我相信我就快到了,但是DLL中有一些函数我在C#中指定时遇到了困难

包含DLL的方式是:

[DllImport("GyroLib.dll")]
该图书馆拥有大约30项功能。如果我只列出其中的一些,那么一切都可以编译和构建,例如:

[DllImport("GyroLib.dll")]
public static extern double getRoll();
public static extern double getHeading();
public static extern double getBadPitch();
不过,有些函数并不是很简单,它们会给我带来错误:

[DllImport("GyroLib.dll")]
public static extern double** getCovMatrix();
public static extern void init(double R0[][3], double deltat, double biasx, double biasy, double biasz);
public static extern void initCF(double R0[][3], double deltat, double* biasx, double* biasy, double* biasz, int buflen);
我认为错误集中在
R0[][3]
C语法上,指针可能需要更改为
ref
out


我应该如何将这些函数声明转换成C#形式,以便在我的WPF应用程序中使用这些函数

深入研究具有类似签名的windows函数,然后看看是否有人将它们放在pinvoke.net上可能会有所帮助?二维double数组(具有静态二维)可以作为一维数组传递,并且正确定义了
MarshalAs
属性(IIRC,
LPArray
应该可以工作). 最大的问题是
double**
。您最好构建一个C++/CLI DLL作为两者之间的粘合剂。