Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 19233|Svar: 0

[WinForm] Sådan kalder man metoder i C/C++ DLL'er i C#

[Kopier link]
Opslået på 05/02/2015 20.52.39 | | | |

Først skal du oprette et C++ DLL-projekt



Ændr CPPTest.cpp for at læse:

CPPTest.cpp : Definerer indgangspunktet for DLL-applikationen.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma klarede (skub, af)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserveret
)
{
returner TRUE;
}
ekstern "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)
{
returner A+B;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
brug af navnerum std;
Cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="De er alle døde!";
}
}

#ifdef _MANAGED
#pragma managed(pop)
#endif


2. Opret et C#-testprojekt


Ændr programmets indhold til:

ved brug af System;
ved brug af System.Collections.Generic;
ved brug af System.Text;
brug af System.Runtime.InteropServices;

navnerum ConsoleApplicationTestCSharp
{
klasseprogram
{
[DllImport("CPPTest.dll")]
statisk ekstern int GetStringLength (ref string str);

[DllImport("CPPTest.dll")]
statisk ekstern int AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
statisk ekstern void StructTest (ref TestStruct s);

statisk void Main(string[] args)
{
string testString = "HAHA! Jeg er en teststreng";

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 = ny TestStruct();
s.i = 12345;
s.str = "Gå ud og skyd ondskab på bjergene!";
StructTest (referencer);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
offentlig struct TestStruct
{
offentlig int I;
offentlig strengstr;
}
}
}

Bemærk DllImportAttribut-tagget ovenformetode

Løberesultat:

length(C++)=24
length(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Gå ud og skyd ondskab på bjergene!
54321
De er alle døde!

For det tredje en forklaring af flere nøgleord i C/C++

_declspec

__stdcall

Ekstern


"C"
(dllexport) eksporterer fra DLL'en ved hjælp af __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Tidligere:Byg en mailserver med Winmail
Næste:C# Dynamisk Tilstandsreference DLL-metode (Genoptryk)
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com