Bir Native.dll dosyasında bir C++ yöntemi int NativeMethod(double, double *)
olduğunu varsayalım. Yönetilen koddan bu yöntemin çağrılması benim ilk denemem DLL kullanmak SonraDllImport'un doğru kullanımı
[DllImport("Native.dll")]
private static extern int NativeMethod(double inD, IntPtr outD);
(I giriş noktası belirtmeniz gerekmez varsayarak) oldu yaptım
IntPtr x = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
NativeMethod(2.0, x);
//do stuff with x
Marshal.FreeHGlobal(x); //crash
ben anlamak istiyorum Bu neden burada çöküyor. Benim ilk tahminim DLL ve benim uygulama farklı bir CRT kullanıyor olabilir gerçeğini nedeniyle bir yığın sorun olmasıdır. Ama durum buysa, neden NativeMethod çökmesine çağrı yapmıyor? Yöntem, double'ı başarılı bir şekilde çıkarabileceğim bir x döndürdü. Ben ithalat
[DllImport("Native.dll")]
private static extern int NativeMethod(double inD, IntPtr outD);
referans
tarafından çift geçirerek işe almak mümkünNeden ilk girişimde FreeHGlobal kazasında, ve yerli yöntemlere işaretçileri geçmesi için önerilen yol mu ne? Dışarıdaki anahtar kelime bu durumu iyi bir şekilde yerine getirebilir, ancak eğer Marshal'e bir ipe ihtiyacım olursa?
IntPtr x = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)));
Size verdiği hata iletisi nedir? – Amy
Elbette, bu tip (çift) olmalıdır. Ama bence BoyOf (typp (InpPtr)) her zaman = = SizeOf (typeof (double)), bu yüzden bir şekilde işe yarayabilir. İlginç, "x ile şeyler" kısmı nedir? –