Cómo llamar a la propiedad nativa de C ++ de C #
-
21-12-2019 - |
Pregunta
No soy tan bueno en C ++ pero,.. Por ejemplo, tengo esto
#define GETSomthing_API __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;
y el método que quiero importar así
GETSomthing_API int GetSomthing(const char* szConfigPath, char *A, int B)
¿Cómo puedo llamar a esto desde C #?
al lado, Creo que mi problema es con el tipo de parámetro (Const Char *) en el lado de C ++, ¿cuál es el tipo igual en C # para él?const char *
gracias,
Solución
Cómo llamar al código C ++ de C #
o
Llamar a la función C ++ de C #
Uso: [Dllimport ("xxx.dll")] xxx.dll es compilar por C ++
Espero esta ayuda.
Otros consejos
Hay un par de maneras para llamar al código nativo de C #.El más fácil es probablemente usar P/Invoke
.
Diga que su función es como:
extern "C" int nGetSomeThing(void);
y se compila en un archivo itandlname.dll, puede usar P / Invoke para llamar directamente al código no administrado de la siguiente manera desde el código C #:
public static class interop
{
[DllImport("YourDllName.dll")]
static extern public int nGetSomeThing(void);
}
...
interop.nGetSomething() // call to the native function
Consulte: http://msdn.microsoft.COM / EN-EE. UU. / Library / AA288468% 28vs.71% 29.aspx .
Si tiene muchas funciones con firmas complejas, probablemente debería ir para una capa de interiores en C ++ / CLI. Consulte: http://www.codeproject.com/articles/19354/quick-c-cli-lelearn-c-cli-in-less-than-10-minutes
¡Acabo de agregar __cplusplus cheque y funcionó!
#ifdef __cplusplus
externo "c" {
endif
GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);
ifdef __cplusplus
}