我有一個函數在一個DLL中具有以下標識符。C#編組一個const char *從DLL的返回值
const char* function(void)
DLL在堆上分配字符串,並期望它只被讀取。我曾嘗試以下導入功能,但我得到一個訪問衝突
[DllImport("great.dll", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl)
]
public static extern string function();
如何處理這個正確
錯誤消息:
System.AccessViolationException:「試圖讀取或寫保護的內存。這往往表明其他內存已經損壞。「
封送拆分器假定DLL在COM堆上分配了字符串,因此在返回的指針上調用CoTaskMemFree。顯然,DLL沒有這樣做。問題是,該字符串是如何分配的?在繼續之前,您需要了解這一點。 –
我不這麼認爲。但是,如果它足夠適合你。 –
另請參閱https://docs.microsoft.com/zh-cn/dotnet/framework/interop/default-marshaling-for-strings –