我必須使用C#訪問動態庫。 它使用COM庫時效果很好,但是當我嘗試使用動態庫時,它會導致錯誤。C# - 從動態庫DLL調用函數
1日問題
起初,我不喜歡這樣我的代碼:
[DllImport("mydll.dll")]
public static extern int toGetInfo(uint id, char[] strVolume, char[] strInfo);
// strVolume and strInfo is parameter that return value with [out]
public static void Main()
{
char[] test1,test2;
toGetInfo(0,test1,test2);
}
但它無法與錯誤使用未分配的局部變量的測試1和測試2編譯。 後來我加入了像這個編輯我的代碼:
[DllImport("mydll.dll")]
public static extern int toGetInfo(uint id, out char[] strVolume, out char[] strInfo);
// strVolume and strInfo is parameter that return [out]
public static void Main()
{
char[] test1,test2;
toGetInfo(0, out test1, out test2);
}
它能夠編譯但返回空值TEST1和TEST2。
第二個問題
[DllImport("mydll.dll")]
public static extern int toOpen(uint id, char* name);
public static void Main()
{
char name;
toOpen(0, name);
}
當編譯它給錯誤
任何想法如何做「指針和固定大小的緩衝區只可以在不安全的上下文中使用」?
一個字符是在C#中的兩個字節,並在C它可能是一個。在c#中使用一個字節[]。在c中,字符數組以'\ 0'結尾,因此最好使用IntPtr Marshal.StringToHGlobalAnsi(string),它自動完成所有工作。所以將char []聲明爲IntPtr。 – jdweng
更改爲intPtr後,它提供了一些東西。等待我會更新 – njz