我有以下问题。我有一个 C++ dll,包含函数
void cpp_send (void *data_, size_t size_, free_fn *ffn_)
{
//sends data
}
然后我有一个类的 C# dll
public class CS_dll : IDisposable
{
void cs_send (void *data)
{
IntPtr ptr = Marshal.AllocHGlobal (data.Length);
Marshal.Copy (data, 0, ptr, data.Length);
try
{
cpp_send (ptr,
Convert.ToUInt32 (data.Length), Free);
}
catch
{
Free (ptr);
}
}
//函数Free()看起来像:
public static void Free (IntPtr ptr)
{
Marshal.FreeHGlobal (ptr);
}
我从 C# 应用程序中将其称为
CS_dll w = new CS_dll();
byte [] msg = new byte [msg_size];
w.cs_send (msg, msg_size);
问题是,一段时间后,C# 应用程序因 SystemAccessViolationExcetpion 而崩溃。你知道问题出在哪里吗?
为了更清楚:C# aaplication 可以完成某些类型的输入,而其他类型的输入会崩溃,所以我不认为调用约定有问题,是吗?