Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 19233|Antwoord: 0

[WinForm] Hoe roep je methoden aan in C/C++ DLL's in C#

[Link kopiëren]
Geplaatst op 05-02-2015 20:52:39 | | | |

Maak eerst een C++ DLL-project aan



Wijzig CPPTest.cpp om te lezen:

CPPTest.cpp : Definieert het toegangspunt voor de DLL-toepassing.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma het gemanaged (duwen, weg)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
externe "C"
{

struct TestStruct
{
Int I;
char* str;
};

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

_declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{
A+B terugbrengen;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
gebruikmakend van namespace std;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Ze zijn allemaal dood!";
}
}

#ifdef _MANAGED
#pragma managed(pop)
#endif


2. Maak een C#-testproject


Wijzig de inhoud van het programma om:

met behulp van System;
met behulp van System.Collections.Generic;
gebruik van System.Text;
gebruik van System.Runtime.InteropServices;

naamruimte ConsoleApplicationTestCSharp
{
Klasprogramma
{
[DllImport("CPPTest.dll")]
statische externe int GetStringLength (ref string str);

[DllImport("CPPTest.dll")]
statisch extern int AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
statische externe void StructTest (ref TestStruct s);

statische void Main(string[] args)
{
string testString = "HAHA! Ik ben een teststring";

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 = nieuwe TestStruct();
s.i = 12345;
s.str = "Ga kwaad schieten op bergen!";
StructTest (ref s);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequentiell)]
publieke struct TestStruct
{
Publiek Int I;
publieke snaarstr;
}
}
}

Let op de tag DllImportAttribute hierbovenmethode

Run resultaat:

length(C++)=24
lengte(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Ga kwaad schieten op bergen!
54321
Ze zijn allemaal dood!

Ten derde een uitleg van verschillende trefwoorden in C/C++

_declspec

__stdcall

extern


"C"
(dllexport) exporteert vanuit de DLL met __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Vorig:Bouw een mailserver met Winmail
Volgend:C# Dynamic State Reference DLL-methode (Herdruk)
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com