我需要从C#程序调用C ++库,我有一个签名如下的方法:
int __stdcall meythodName(const char *c, struct TheirStruct[] s1, struct TheirStruct[] s2)
所有参数都是输出参数。
我试图像这样调用这个方法:
[DllImport("theirlib.dll", CallingConvention = CallingConvention.StdCall)]
extern static int meythodName(ref string c, ref TheirStruct[] s1, ref TheirStruct[] s2);
WithStruct就像:
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 13)]
public class TheirStruct
{
public int i;
public int j;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string s;
}
他们的结构(PACKED和13字节大小)在dll手册中描述为:
#define LEN 5
#define SIZE 50
struct TheirStruct
{
char c[LEN];
int i;
int j;
};
当我尝试调用此方法时,我的应用程序只是在没有给出错误代码的情况下终止,你能给我一些关于这个问题的解释吗?
答案 0 :(得分:0)
实测值!!!
我只需要改变" class" to" struct"在他们的结构声明中,删除di" ref"方法调用中的关键字,并相应地设置[In] / [Out]。
非常简单,希望这可以有任何帮助!!