1
我正在嘗試將C DLL導入到我的C#項目中。 的.H代碼如下所示:DLLImport類型問題
_declspec(dllexport) LRESULT CALLBACK SensFindDeviceW(LONG n, LPWSTR pwszMask, PSENSDEVICEW pDevice);
的_SENSDEVICEW結構:
typedef struct _SENSDEVICEW
{
WCHAR szSerialNo[32];
WCHAR szDeviceID[32];
LONG nIndex;
} SENSDEVICEW, * PSENSDEVICEW;
所以我在C#所做的到現在爲止使用的DllImport:
[DllImport("dll/UFTAccess.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
static extern unsafe long SensFindDeviceW(long n, String pszMask, SENSDEVICEW pDevice);
定義結構:
[StructLayout(LayoutKind.Sequential)]
unsafe struct SENSDEVICEW
{
public char[] szSerialNo;
public char[] szDeviceID;
public long nIndex;
}
,並試圖在一個方法來使用它:
SENSDEVICEW myDevice = new SENSDEVICEW();
myDevice.szSerialNo = new char[32];
myDevice.szDeviceID = new char[32];
long test = SensFindDeviceW(1, "", myDevice);
有了這一個得到System.Runtime.InteropServices.SafeArrayTypeMismatchException。
如果我不初始化數組,我得到一個堆棧不平衡錯誤。
我已經在使用的StringBuilder(其不工作)和編組炭陣列這樣的嘗試:
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
string szSerialNo;
但它導致堆疊不平衡。
也許你們中的任何一個人都有一個想法還有什麼我可以嘗試讓DLL工作?
謝謝youuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,它工作正常:)現在真的更有意義。是的,pszMask是一個輸入參數。 – Vezixig