C#调用DLL的问题(如何以传址方式传递一个结构数组?)
各位大哥,我用VC做了一个DLL,其中有一个函数是这样的:
int _stdcall gsmParseMessageList(SM_PARAM* pMsg)
{
……………………
}
上面定义的SM_PARAM结构在C#中的定义如下:
public struct SM_PARAM
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string SCA;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string TPA;
public char TP_PID;
public char TP_DCS;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string TP_SCTS;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 160)]
public string TP_UD;
short index;
};
我定义了 SM_PARAM [] msg=new SM_PARAM [10] 这样一个数组,但是因为
C#默认不支持指针的,我要以传址的方式传递一个结构数组,在DLL如何声名?之前我试过
这样:
[DllImport("D:\\DLL\\temp\\Debug\\mmt.dll")]
public static extern int gsmParseMessageList (ref SM_PARAM [] msg);
但是这就相当于传递了一个二级指针了,只有将DLL中的int _stdcall gsmParseMessageList(SM_PARAM* pMsg)改为int _stdcall gsmParseMessageList(SM_PARAM** pMsg)才能正常运行,但我只要以传址的方式传递一个结构数组到gsmParseMessageList(SM_PARAM* pMsg)中,请问我要怎么做?希望大家帮帮忙,小弟感激不尽,谢谢!