Salut,
Si tu n'a pas de DLL tu ne peux pas faire de p/invoke.
Donc il faut que tu créer une dll C, que tu la link aux libs que tu va utiliser, dans cette dll C tu écris des fonctions encapsulant celles dont tu as besoins.
Une fois que tu aura ta DLL tu pourra écrire une classe C# qui fera du p/invoke.
Exemple :
Admettons une lib "MonCodec". Tu possède donc deux fichiers :
- moncodec.lib (contenant le code exécutable de ta lib)
- moncodec.h (contenant les prototypes utilisables de ta lib)
Cette lib expose une fonction :
extern "C" __declspec(dllexport) int GetOne();
Toi tu commence par créer une DLL écrite en C :
1 2 3 4 5 6
|
#include "moncodec.h"
extern "C" __declspec(dllexport) int Wrap_GetOne()
{
return GetOne(); // Appel de la fonction contenu dans ta lib.
} |
Une fois que c'est fais, tu aura MonCodec.dll contenant une fonction Wrap_GetOne.
Tu peux du coup faire du P/Invoke :
1 2 3 4 5 6
|
public static class MonCodecDotNet
{
[DllImport("MonCodec.dll")]
public static int Wrap_GetOne();
} |
Et voilà.
Après tu va certainement souffrir pour faire ca sur toutes les fonctions que tu utilises, sans parler des problèmes de pointeurs, allocation non grée par garbage, marshalling, ... mais je te laisse découvrir tout ca au cas par cas.
Sinon tu peux aussi écrire une DLL en C++/Cli, ca te fait un peu moins de code à écrire normalement, mais bon, perso, je pratique le C++ depuis que j'ai 8 ans et ca fait bien 4 ans que je fais du C# et pourtant je n'arrive pas à me faire à la syntaxe de ce mixte de langage. A toi de voir.
Partager