için Belirtildi C++ DLL'mdeki bir işlevde, std :: string'i C# uygulamasına döndürüyorum. Hemen hemen şuna benzer:Bir std :: string bir C++ DLL'den bir C# programa döndürme -> Geçersiz Adres RtlFreeHeap
std::string g_DllName = "MyDLL";
extern "C" THUNDER_API const char* __stdcall GetDLLName()
{
return g_DllName.c_str();
}
Ama C# kodu bu fonksiyonu çağırdığında, benim çıkış penceresinde bu mesajı alıyorum:
Invalid Address specified to RtlFreeHeap(00150000, 0012D8D8)
C# işlevi beyanı şöyle:
[DllImport("MyDll", EntryPoint = "GetDLLName")]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string GetDLLName();
Çevrimiçi olarak bulabildiğim kadarıyla, bazen bu ileti silme ile hangi yeni sürüm (hata ayıklama veya bırakma, vb.) Kullanıldığında arasında bir tutarsızlık olduğunda görüntülenir. Ama benim durumumda olup bittiğinden emin değilim. Bu yüzden buna neyin sebep olduğuna emin değilim. Belki de MashallA'ların bununla bir ilgisi olabilir?
Herhangi bir fikrin var mı?
Teşekkürler!
kontrol edebilir Eğer yani) hata ayıklama vb oluşturur ve b) bu sorun hem hata ayıklama oluşur için doğru (hata ayıklama) kütüphaneleri kullanıyorsanız ve ne buldum:
ben bu sayfadan çözüm buldu sürüm oluşturur ve c) C++ dll'iniz için/clr/pure yerine/clr: pure kullanmayı deneyin. – dirkgently