C#DllImport问题调用C ++库

时间:2013-09-20 14:13:22

标签: interop marshalling dllimport

我需要从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;                   
};

当我尝试调用此方法时,我的应用程序只是在没有给出错误代码的情况下终止,你能给我一些关于这个问题的解释吗?

1 个答案:

答案 0 :(得分:0)

实测值!!!

我只需要改变" class" to" struct"在他们的结构声明中,删除di" ref"方法调用中的关键字,并相应地设置[In] / [Out]。

非常简单,希望这可以有任何帮助!!