Tengo una biblioteca estática. Esta biblioteca han definido la siguiente funciónPrefijo L para cadenas en C++
int WriteData(LPTSTR s)
La muestra a llamar a la función es
LPTSTR s = (LPTSTR) L"Test Data";
int n = WriteData(s);
WriteData devuelven 0 en caso de éxito y -1 en caso de error.
Estoy escribiendo una DLL dinámica para exportar esta función.
int TestFun(LPTSTR lpData)
{
return WriteData(lpData);
}
A C++ resultado aplicación de prueba
LPTSTR s = (LPTSTR) L"Test Data";
TestFun(s); //OK return 0
LPTSTR s = (LPTSTR) "Test Data";
TestFun(s); //Fail return -1
tengo que llamarlo desde una aplicación C#. Asumo mi firma DLL-Import sería:
[DllImport("Test.dll")]
private static extern int TestFun(String s);
Mi pregunta es muy simple ¿Cómo puedo llamarlo desde .Net? Como se puede ver que tengo control sobre
TestFun(LPTSTR lpData)
pero ningún control sobre
WriteData(LPTSTR s)
Gracias a todos por sus aportaciones. Hasta ahora estoy atascado en el casting. Creo que mi problema se resolverá cuando pueda tomar la información del usuario y escribir 2 líneas para el casting en lugar de la línea siguiente.
LPTSTR s = (LPTSTR) L"Test Data"); //<= How can ii take input from user and
TestFun(s); //OK return 0
El uso de TCHAR tuvo sentido hace 10 años. No más, no hay un sistema operativo que no sea Unicode que deba soportar. Haz todo wchar_t y sigue adelante. –
¿Cómo puedo hacer eso? – Manjoor
¿Qué 'no funciona' cuando pasa lpData a la función WriteData? – harper