Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 19233|Odgovoriti: 0

[WinForm] Kako klicati metode v C/C++ DLL-jih v C#

[Kopiraj povezavo]
Objavljeno na 5. 02. 2015 20:52:39 | | | |

Najprej ustvarite C++ DLL projekt



Spremenite CPPTest.cpp, da prebere:

CPPTest.cpp : Določa vstopno točko za DLL aplikacijo.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma upravljano (potisk, izklop)
#endif

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

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

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

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

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
uporaba imenskega prostora STD;
Cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Vsi so mrtvi!";
}
}

#ifdef _MANAGED
#pragma upravljano (pop)
#endif


2. Ustvariti testni projekt v C#


Spremenite vsebino programa, da:

z uporabo System;
z uporabo System.Collections.Generic;
z uporabo System.Text;
uporaba System.Runtime.InteropServices;

imenski prostor ConsoleApplicationTestCSharp
{
Razredni program
{
[DllImport("CPPTest.dll")]
static extern int GetStringLength(ref string str);

[DllImport("CPPTest.dll")]
statični extern intAddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
statični zunanji void StructTest(ref TestStruct s);

static void Main (string[] args)
{
string testString = "HAHA! Jaz sem testna nit";

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 = nov TestStruct();
s.i = 12345;
s.str = "Pojdi streljat zla po gorah!";
StructTest(ref s);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
javna struktura TestStruct
{
javni int i;
Public String Str;
}
}
}

Opazite oznako DllImportAttribute zgorajmetoda

Rezultat teka:

dolžina(C++)=24
dolžina(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Pojdi streljat zla na gorah!
54321
Vsi so mrtvi!

Tretjič, razlaga več ključnih besed v C/C++

_declspec

__stdcall

zunanji


"C"
(dllexport) izvozi iz DLL z uporabo __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Prejšnji:Zgradite poštni strežnik z Winmailom
Naslednji:C# Dynamic State Reference DLL metoda (ponatis)
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com