Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 19233|Atsakyti: 0

[WinForm] Kaip iškviesti metodus C/C++ DLL C#

[Kopijuoti nuorodą]
Paskelbta 2015-02-05 20:52:39 | | | |

Pirmiausia sukurkite C++ DLL projektą



Pakeisti CPPTest.cpp taip:

CPPTest.cpp : apibrėžia DLL programos įėjimo tašką.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma valdomas (stumti, išjungti)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
grąžinti TRUE;
}
išorinis "C"
{

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

_declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{
grąžinti strlen(str);
}

_declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{
grąžinti A+B;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
vardų srities STD naudojimas;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Jie visi mirę!";
}
}

#ifdef _MANAGED
#pragma valdomas (pop)
#endif


2. Sukurkite C# testavimo projektą


Modifikuokite programos turinį, kad:

naudojantis Sistema;
naudojant System.Collections.Generic;
naudojant System.Text;
naudojant System.Runtime.InteropServices;

vardų sritis ConsoleApplicationTestCSharp
{
klasės programa
{
[DllImport("CPPTest.dll")]
statinis extern int GetStringLength(ref string str);

[DllImport("CPPTest.dll")]
statinis išorinis int AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
statinė išorinė tuščia StructTest(nuoroda TestStruct s);

static void Main(string[] args)
{
string testString = "HAHA! Aš esu bandomoji styga";

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 = naujas TestStruct();
s.i = 12345;
s.str = "Eik šaudyti blogybių ant kalnų!";
StructTest(nuoroda);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
viešoji struktūra TestStruct
{
viešasis int i;
viešoji styga str;
}
}
}

Atkreipkite dėmesį į aukščiau pateiktą žymę DllImportAttributemetodas

Vykdymo rezultatas:

ilgis (C++)=24
ilgis (C#) = 24
a+b(C++)=1010
a+b(C#)=1010
12345
Eik šaudyti blogybių ant kalnų!
54321
Jie visi mirę!

Trečia, kelių raktinių žodžių paaiškinimas C/C++

_declspec

__stdcall

išorinis


"C"
(DLLEXPORT) eksportuoja iš DLL naudojant __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Ankstesnis:Sukurkite pašto serverį naudodami "Winmail"
Kitą:C# dinaminės būsenos nuorodos DLL metodas (pakartotinis spausdinimas)
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com