Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 19233|Vastaus: 0

[WinForm] Kuinka kutsua metodeja C/C++-DLL:illä C#:ssa

[Kopioi linkki]
Julkaistu 5.2.2015 20.52.39 | | | |

Luo ensin C++ DLL -projekti



Muokkaa CPPTest.cpp seuraavasti:

CPPTest.cpp : Määrittelee DLL-sovelluksen sisäänpääsypisteen.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma onnistunut (työntö, pois)
#endif

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

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

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

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

_declspec(dllexport) void __stdcall StructTest(TestStruct&s)
{
käyttäen nimiavaruutta STD;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="He ovat kaikki kuolleet!";
}
}

#ifdef _MANAGED
#pragma hallittu(pop)
#endif


2. Luo C#-testiprojekti


Muokkaa ohjelman sisältöä seuraavasti:

käyttämällä Systemiä;
käyttäen System.Collections.Generic-tiedostoa;
käyttäen System.Textiä;
käyttäen System.Runtime.InteropServices;

nimiavaruus ConsoleApplicationTestCSharp
{
luokkaohjelma
{
[DllImport("CPPTest.dll")]
staattinen ulkoinen int GetStringLength (viite merkkijonon str);

[DllImport("CPPTest.dll")]
staattinen ulkoinen int AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
staattinen ulkoinen void StructTest(viitte TestStruct s);

staattinen void Pää(merkkijono[] args)
{
string testString = "HAHA! Olen testijono";

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 = uusi TestStruct();
s.i = 12345;
s.str = "Mene ampumaan pahuutta vuorille!";
StructTest(viite s);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
public struct TestStruct
{
julkinen int i;
julkinen jousivoima;
}
}
}

Huomaa yllä oleva DllImportAttribute-tunnistemenetelmä

Juoksutulos:

pituus(C++)=24
pituus(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Mene ampumaan pahoja vuorille!
54321
He ovat kaikki kuolleet!

Kolmanneksi, selitys useista avainsanoista C/C++:ssa

_declspec

__stdcall

ulkopuolinen


"C"
(dllexport) vienti DLL:stä käyttäen __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Edellinen:Rakenna sähköpostipalvelin Winmaililla
Seuraava:C# Dynaaminen tilaviite DLL-menetelmä (uudelleenpainos)
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com