私は以下の問題があります。C#データ割り当ての問題
public static void Free (IntPtr ptr)
{
Marshal.FreeHGlobal (ptr);
}
I:私は
void cpp_send (void *data_, size_t size_, free_fn *ffn_)
{
//sends data
}
その後、私は
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);
}
}
は//)(フリー機能がどのように見えるクラスを持つC#のDLLを持っている機能を含む、C++のdllを持っていますC#のアプリケーションから呼び出す
CS_dll w = new CS_dll();
byte [] msg = new byte [msg_size];
w.cs_send (msg, msg_size);
問題は、しばらくしてから、C#アプリケーションがSystemAccessViolationExcetpionでクラッシュすることです。 問題がどこにあるか分かりますか?
明確にするには:いくつかのタイプの入力ではC#のアプリケーションを終了できますが、他はクラッシュするので、呼び出し規約に問題はありませんか?
send関数:= cs_send(msg、msg_size)? – lakshmanaraj
AccessViolationExceptionの原因となっているコードは何行ですか? –
AVはアンマネージコードによって引き起こされます。あなたのcpp_send()関数。あなたが投稿しなかったコード。 –