У меня есть следующая проблема. У меня есть библиотека C++, содержащий функциюПроблема с распределением данных C#
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);
}
I назовите его из приложения C# как
CS_dll w = new CS_dll();
byte [] msg = new byte [msg_size];
w.cs_send (msg, msg_size);
Проблема заключается в том, что через некоторое время приложение C# выходит из строя с помощью SystemAccessViolationExcetpion. У вас есть идеи, где проблема?
Чтобы сделать его понятным: CAP-апликация может завершиться для некоторых типов ввода, в то время как для других он сбой, так что я не знаю, есть ли проблемы с вызовом конвенции, есть ли?
отправить функцию: = cs_send (msg, msg_size)? – lakshmanaraj
Какая строка кода вызывает AccessViolationException? –
AV-файлы вызваны неуправляемым кодом. Вероятно, ваша функция cpp_send(). Код, который вы не опубликовали. –