0
我不太知道我可能是做錯了,但我不斷收到System.ArgumentException調用從C#非託管的DLL也許我錯了編組
當我看IDL(由ITyteLib Veiwer產生的),我可以看到這兩個結構和模塊
typedef struct tagXxxStruct {
short type;
short file;
short rec;
short word;
short start_bit;
short length;
short flags;
short padding;
short value;
short padV[3];
short status;
short padA[3];
} XxxStruct;
[entry("dat"), helpstring("...")]
short _stdcall dat_Int(
[in] LPSTR Server,
[in] short num_points,
[in, out] SAFEARRAY(XxxStruct)* XxxStruct_data);
我在使用時的DllImport像這樣:
[DllImport("hscnetapi.dll", EntryPoint = "dat", CallingConvention = CallingConvention.StdCall)]
public static extern unsafe short dat_SA([MarshalAs(UnmanagedType.LPStr)] string host, short num_points, [MarshalAs(UnmanagedType.SafeArray)] XxxStruct[] dat_data);
和呼叫它像這樣
public struct XxxStruct
{
public short type;
public short file;
public short rec;
public short word;
public short start_bit;
public short Length;
public short Flags;
public short padding;
public short value;
public short[] padV;
public short Status;
public short[] padA;
}
server = "localhost";
XxxStruct[] xobj= new XxxStruct[2];
for (i = 0; i <= 1; i++)
{
var _with1 = xobj[i];
_with1.type = 2;
_with1.file = 8;
_with1.rec = 1;
_with1.word = ((short)(359 + (i)));
_with1.Flags = 0;
_with1.padV = new short[3];
_with1.padA = new short[3];
xobj[i] = _with1;
}
dat_SA(server, (short)2, xobj);
顯示您的託管'XxxStruct'。另外,你在哪一行代碼中得到了ArgumentException? – 2013-04-09 13:15:06
我在這一行dat_SA(server,(short)2,xobj)得到異常; – Yeti 2013-04-10 06:55:07
可能重複[System.ArgumentException從c#調用非託管dll](http://stackoverflow.com/questions/15832245/system-argumentexception-when-calling-unmanaged-dll-from-c-sharp) – 2013-04-10 13:15:01