Trong một hàm trong C++ DLL của tôi, tôi trả về một chuỗi std :: thành ứng dụng C# của tôi. Nó khá nhiều trông như thế này:Trả về một chuỗi std :: từ một DLL C++ thành một chương trình C# -> Địa chỉ không hợp lệ được chỉ định cho RtlFreeHeap
std::string g_DllName = "MyDLL";
extern "C" THUNDER_API const char* __stdcall GetDLLName()
{
return g_DllName.c_str();
}
Nhưng khi C# mã của tôi gọi chức năng này, tôi nhận được tin nhắn này trong cửa sổ đầu ra của tôi:
Invalid Address specified to RtlFreeHeap(00150000, 0012D8D8)
Các khai báo hàm trong C# trông như thế này:
[DllImport("MyDll", EntryPoint = "GetDLLName")]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string GetDLLName();
Từ những gì tôi có thể tìm thấy trực tuyến, đôi khi thông báo này xuất hiện khi có sự không thống nhất giữa phiên bản mới (gỡ lỗi hoặc phát hành, v.v.) đang được sử dụng với xóa. Nhưng tôi không chắc đó có phải là những gì đang xảy ra trong trường hợp của tôi hay không. Vì vậy, tôi không chắc chắn chính xác những gì gây ra nó. Có lẽ MashallAs có thể liên quan gì đến nó?
Bất kỳ ý tưởng nào?
Cảm ơn!
bạn có thể kiểm tra những gì bạn tìm thấy ví dụ a) nếu bạn đang sử dụng debug đúng) thư viện (ví debug xây dựng vv và b) Vấn đề này xảy ra ở cả hai gỡ lỗi và phát hành bản xây dựng và c) thử sử dụng/clr: pure thay vì/clr cho C++ dll của bạn. – dirkgently