我是C#和.NET的新手。我想在.NET中使用我現有的C++ dll,所以我正在嘗試使用interop。我不知道爲什麼會引發這個例外。我知道那個異常意味着什麼,我讀了MSDN,但不知道爲什麼會引發這種情況。爲什麼我在c#/ C++ dll interop期間得到System.AccessViolationException?
我的代碼是這樣的。
該dll代碼是一個簡單的功能,需要一個char*
。
extern "C" __declspec(dllexport)void test(char *text)
{
// these raise System.AccessViolationException
// char c = text[0];
// int n = strlen(text);
// char *copy = strdup(text);
}
的C#代碼是一個簡單的類調用這個函數
namespace Interop_test
{
class Program
{
static void Main(string[] args)
{
char[] text = new char[10];
for (int i = 0; i < 10; i++)
text[i] = (char)('A' + i);
test(text);
}
[DllImport("interop_test_dll.dll")]
private static extern void test(char[] text);
}
}
的說,如果在DLL函數中註釋掉的代碼被刪除異常。爲什麼?
如何(或必須)我將C#數據數組傳遞給C++?
從哪裏可以找到有關在C++/C#interop期間處理內存管理的更多信息?
這適用於此處顯示的代碼,char c = text [0];但其他操作如strdup,strlen等失敗。 – Dirt 2012-02-08 10:30:45