我想在C#中为我的程序使用c库。
该库包含一个带有c函数的头文件,用于控制摄像头。
c中的一些函数使用一个名为*fg
的指针
它指向一个名为Fg_Struct
的typedef
最后,这个typedef被声明为Typedef struct Fg_Struct_s Fg_Struct
所以现在,我想在我的c#程序中使用头文件中的这些函数。
我创建了一个新类并从dll-libary导入了这些函数
在pinvoker-addon上
pinvoker-addon创建了这些函数的新声明
(从非管理到管理)
大多数这些新声明的函数都有一个名为的变量
Fg_Struct [] Fg
Visual Studio在C#programm中向我显示“Fg_Struct未定义”的错误。
例如,我可以使用Fg_getLastErrorDiscripstion函数来调用错误描述
C中的
fgrab_struct.h
typedef struct Fg_Struct_s Fg_Struct;
fgrab-prototyp.h
include "struct.h"
const char *const Fg_getLastErrorDescription(Fg_Struct *Fg);
的main.cpp
Fg_Struct *fg = NULL;
fg = Fg_Init(DLLNAME, boardNr)
fprintf(stderr, "error in Fg_Init: %s\n", Fg_getLastErrorDescription(NULL));
现在我想在c#中使用它:
CAM_SISO.cs
[DllImport("fglib5.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public extern static IntPtr Fg_getLastErrorDescription(Fg_Struct [] Fg);`
我是C#编程的新手,并且通过pinvoker在每个主题中进行了研究 但我找不到合适的答案,如何声明或定义Fg_Struct [] Fg以在C#中使用Fg_getLastErrorDiscription函数。
答案 0 :(得分:0)
如果您的代码实际上没有真正查看Fg_Struct
内部,只将其传递给DLL中的其他函数,那么您可以在C头文件具有{{1}的任何地方使用IntPtr
}}
除此之外,由于C源代码使用以下任意一个指针:array,pass-by-reference参数,输出参数,自动p / invoke生成器必须猜测并且经常会产生错误的结果,例如数组他们不属于的地方。