大家好我正在尝试将C ++项目编译成DLL,然后使用C#中的Structs和方法。我制作了一个openCV程序,我需要来回传递数据。现在我正在尝试简单的事情来熟悉这门语言,因为这是我第一次接触C ++和C#...
所以在C ++中我有:
#pragma pack(push, 2)
typedef struct
{
//char *plate;
unsigned int width;
unsigned int height;
//bool hasPlateOn;
//unsigned char *imgData;
} Sframe;
extern "C" Sframe MYCVAPI findPossiblePlates(Sframe& in)
我尝试使用C#中的这个:
[StructLayout(LayoutKind.Sequential)]
struct Sframe
{
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
// char[] plate;
[MarshalAs(UnmanagedType.U4)]
int width;
[MarshalAs(UnmanagedType.U4)]
int height;
// bool hasPlateOn;
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
// char[] imgData;
}
[DllImport(@"ALPR_pwv.dll",CallingConvention=CallingConvention.Cdecl,EntryPoint = "findPossiblePlates")]
static extern Sframe findPossiblePlates(Sframe infoOut);
但无论我尝试什么,我都会得到错误,方法的类型签名不是PInvoke兼容的。
有没有人可以帮助我理解这个问题?
是否可以在C ++和C#中传递和获取自定义结构?
因为我必须使用坐标等数据传递图像,所以最终的结构会复杂得多......
答案 0 :(得分:0)
正如@SaniSinghHuttunen所说,我错过了ref关键字,不得不使用MarshalAs.U4 ......再次感谢:)