Como chamar propriedade nativa C++ de C#
-
21-12-2019 - |
Pergunta
Eu não sou tão bom em C ++, mas ..Por exemplo eu tenho isso
#define GETSomthing_API __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;
E o método que quero importar assim
GETSomthing_API int GetSomthing(const char* szConfigPath, char *A, int B)
Como posso chamar isso de C#?
Além disso, acho que meu problema é com o tipo de parâmetro (const char*) no lado C ++, qual é o tipo igual em C# para ele!const caracter*
Obrigado,
Solução
Como ligar para o código C ++ de C #
.ou
Usando: [dllimport ("xxx.dll")] xxx.dll é compilado por C ++
Espero que esta ajuda.
Outras dicas
Existem algumas maneiras de chamar código nativo de C#.O mais fácil é provavelmente usar P/Invoke
.Digamos que sua função seja como:
extern "C" int nGetSomeThing(void);
e é compilado em um arquivo YourDllName.dll, você pode usar P/Invoke para chamar diretamente o código não gerenciado da seguinte maneira a partir do código C#:
public static class interop
{
[DllImport("YourDllName.dll")]
static extern public int nGetSomeThing(void);
}
...
interop.nGetSomething() // call to the native function
Referir : http://msdn.microsoft.com/en-us/library/aa288468%28VS.71%29.aspx.
Se você tem muitas funções com assinaturas complexas, provavelmente deveria optar por uma camada de interoperabilidade em C++/CLI.Referir : http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-em-menos-de-10-minutos
Acabei de adicionar __cplusplus check e funcionou!
#ifdef __cplusplus
externo "C" {
fim se
GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);
ifdef__cplusplus
}