Comment appeler la propriété native C++ à partir de C#
-
21-12-2019 - |
Question
Je ne suis pas si bon en C ++ mais, ..Par exemple j'ai ceci
#define GETSomthing_API __declspec(dllexport)
extern GETSomthing_API int nGetSomthing;
Et la méthode que je veux importer comme ça
GETSomthing_API int GetSomthing(const char* szConfigPath, char *A, int B)
Comment puis-je appeler cela depuis C# ?
À côté, je pense que mon problème est avec le type de paramètre (const char *) du côté C ++, quel est le type égal en C # pour cela!const char*
Merci,
La solution
Comment appeler C ++ code de C #
ou
Utilisation: [dllimport ("xxx.dll")] xxx.dll est compilé par C ++
J'espère que cette aide.
Autres conseils
Il existe plusieurs façons d’appeler du code natif à partir de C#.Le plus simple est probablement d'utiliser P/Invoke
.Disons que votre fonction ressemble à :
extern "C" int nGetSomeThing(void);
et il est compilé dans un fichier YourDllName.dll, vous pouvez utiliser P/Invoke pour appeler directement le code non managé de la manière suivante à partir du code C# :
public static class interop
{
[DllImport("YourDllName.dll")]
static extern public int nGetSomeThing(void);
}
...
interop.nGetSomething() // call to the native function
Référer : http://msdn.microsoft.com/en-us/library/aa288468%28VS.71%29.aspx.
Si vous disposez de nombreuses fonctions avec des signatures complexes, vous devriez probablement opter pour une couche d'interopérabilité en C++/CLI.Référer : http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes
Je viens d'ajouter __cplusplus check et cela fonctionnait!
#ifdef __cplusplus
extern "c" {
endif
GETSomthing_API char* GetAgentId(const char* szConfigPath, char *szA, int ASize);
IFDEF __CPLUSPLUS
}