Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 19233|Répondre: 0

[WinForm] Comment appeler des méthodes dans les DLL C/C++ en C#

[Copié le lien]
Publié sur 05/02/2015 20:52:39 | | | |

Tout d’abord, créez un projet DLL C++



Modifiez CPPTest.cpp pour qu’il s’affiche :

CPPTest.cpp : Définit le point d’entrée de l’application DLL.
//
#include « stdafx.h »
#include

#ifdef _MANAGED
#pragma réussi (poussée, recul)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpRéservé
)
{
retour TRUE ;
}
extern « C »
{

struct TestStruct
{
int i ;
char* str ;
};

_declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{
retour strlen(strlen) ;
}

_declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{
retourner a+b ;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
en utilisant l’espace de noms STD ;
Cout<<s.i<<endl ;
cout<<s.str<<endl ;
s.i=54321 ;
s.str="Ils sont tous morts ! » ;
}
}

#ifdef _MANAGED
#pragma géré (pop)
#endif


2. Créer un projet test C#


Modifier le contenu du programme pour :

utilisant System ;
utilisant System.Collections.Generic ;
en utilisant System.Text ;
utilisant System.Runtime.InteropServices ;

Espace de noms ConsoleApplicationTestCSharp
{
Programme de la classe
{
[DllImport(« CPPTest.dll »)]
static extern int GetStringLength(ref string str) ;

[DllImport(« CPPTest.dll »)]
static extern int AddTwoNumber(int a, int b) ;

[DllImport(« CPPTest.dll »)]
vide externe statique StructTest (réf. TestStruct s) ;

vide statique Main(string[] args)
{
string testString = « HAHA ! Je suis une chaîne d’essai » ;

Console.WriteLine(« length(C++)= » + GetStringLength(ref testString). ToString()) ;
Console.WriteLine(« length(C#)= » + testString.Length.ToString()) ;
Console.WriteLine(« a+b(C++)= » + AddTwoNumber(10, 1000)) ;
Console.WriteLine(« a+b(C#)= » + (10 + 1000)) ;

TestStruct s = new TestStruct() ;
s.i = 12345 ;
s.str = « Va tirer sur les méfaits sur les montagnes ! » ;
StructTest (réf. s) ;
Console.WriteLine(s.i) ;
Console.WriteLine(s.str) ;
Console.ReadKey() ;
}

[StructLayout(LayoutKind.Sequential)]
structure publique TestStruct
{
public int i ;
cordes publiques ;
}
}
}

Notez le tag DllImportAttribute ci-dessusméthode

Résultat de la série :

length(C++)=24
longueur(Do#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Allez tirer sur les méchants sur les montagnes !
54321
Ils sont tous morts !

Troisièmement, une explication de plusieurs mots-clés en C/C++

_declspec

__stdcall

Extern


« C »
(dllexport) exporte depuis la DLL en utilisant __declspec (dllexport).
</s.str<<endl ;
</s.i<<endl ;




Précédent:Construis un serveur de messagerie avec Winmail
Prochain:Méthode DLL de référence d’état dynamique C# (réimpression)
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com