我嘗試調用C#中用C編寫的dll方法。調用C DLL中的方法失敗
這是C方法:
這也是我嘗試調用它的方式。
[DllImport(EntryPoint = "c_ata", CallingConvention = CallingConvention.Cdecl)]
private static extern string cAta(byte[] c, long c_len, byte[] b, long b_len);
問題是我沒有得到任何錯誤,當我嘗試運行或調試我的NUnit測試。
我不是很熟悉C語法,所以問題是?我的電話語法是否正確(理論上)?
size_t參數需要是IntPtr。字符串返回值也需要是IntPtr,否則編組人員會試圖銷燬字符串。這是非常少見的,C代碼通常不會使用CoTaskMemAlloc()來分配可以在另一個模塊中安全釋放的內存。這很可能是不可避免的內存泄漏。使用Marshal.PtrToStringAnsi()轉換IntPtr。編寫一個測試程序,數百萬次調用該函數,觀察內存使用情況。 – 2014-09-05 23:19:11