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,

Foi útil?

Solução

Como ligar para o código C ++ de C #

.

ou

Chamando C ++ Função de C #

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

}

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top