En una función en mi DLL C++, devuelvo una cadena std :: a mi aplicación C#. Es más o menos el siguiente aspecto:Devolviendo una cadena std :: desde una DLL C++ a un programa C# -> Dirección no válida especificada a RtlFreeHeap
std::string g_DllName = "MyDLL";
extern "C" THUNDER_API const char* __stdcall GetDLLName()
{
return g_DllName.c_str();
}
Pero cuando mi C# código llama a esta función, me sale este mensaje en mi ventana de salida:
Invalid Address specified to RtlFreeHeap(00150000, 0012D8D8)
La declaración de la función en C# es el siguiente:
[DllImport("MyDll", EntryPoint = "GetDLLName")]
[return: MarshalAs(UnmanagedType.LPStr)]
public static extern string GetDLLName();
De lo que he podido encontrar en línea, a veces este mensaje aparece cuando hay una inconsistencia entre qué versión de nuevo (depuración o versión, etc.) se está utilizando con eliminar. Pero no estoy seguro si eso es lo que está pasando en mi caso. Así que no estoy seguro de qué es lo que lo está causando. Tal vez los MashallAs podrían tener algo que ver con eso?
¿Alguna idea?
Gracias!
Se puede comprobar lo que ha encontrado es decir, a) si está utilizando las bibliotecas correctas (depuración) para versiones de depuración, etc y b), este problema se produce tanto en la depuración y lanzar versiones yc) intentar usar/clr: pure en lugar de/clr para su dll de C++. – dirkgently