我想調用這個C DLL函數C#調用本地DLL - 結構編組
long foo (long l2, long l2, char *c, MYSTRUCT *mystruct);
需要這個結構:
typedef struct {
bool b;
short s;
double d1;
double d2;
double d3;
} MYSTRUCT;
現在,這應該是很簡單的。我不喜歡這樣的:
[StructLayout(LayoutKind.Sequential)]
public struct MYCSSTRUCT
{
[MarshalAs(UnmanagedType.I1)]
public bool b;
public Int16 s;
public double d1;
public double d2;
public double d3;
}
而且這樣調用該函數:
[DllImport("my.dll", CallingConvention = CallingConvention.StdCall, SetLastError = false)]
public static extern Int32 foo(Int32 l1, Int32 l2, string c, ref MYCSSTRUCT mycsstruct);
,但在結束時,DLL接收所有正確的價值觀,但D1,D2和D3。我不明白爲什麼會出現錯誤。任何建議,將不勝感激。
如果您使用CallingConvention.StdCall從C#中調用C函數,那麼您的c函數看起來並不是'__stdcall',運行時將無法找到它,即使它確實會損壞堆棧。 – Mgetz 2014-10-02 15:15:04
嗯,實際上全功能定義是: __declspec(dllimport)long __stdcall foo(long l2,long l2,char * c,MYSTRUCT * mystruct); – Nikzeno 2014-10-02 15:34:55