Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 19233|Svare: 0

[WinForm] Hvordan kalle metoder i C/C++ DLL-er i C#

[Kopier lenke]
Publisert på 05.02.2015 20:52:39 | | | |

Først, lag et C++ DLL-prosjekt



Endre CPPTest.cpp til å lese:

CPPTest.cpp: Definerer inngangspunktet for DLL-applikasjonen.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma klarte (skyv, av)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
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)
{
bruk av namespace 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. Opprette et C#-testprosjekt


Endre programmets innhold til:

ved bruk av System;
ved bruk av System.Collections.Generic;
ved bruk av System.Text;
bruk av System.Runtime.InteropServices;

navnerom ConsoleApplicationTestCSharp
{
Klasseprogram
{
[DllImport("CPPTest.dll")]
statisk ekstern int GetStringLength (ref streng 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å og skyt ondskap på fjellene!";
StructTest (referanser);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
offentlig struktur TestStruct
{
offentlig int I;
offentlig strengstyrke;
}
}
}

Merk DllImportAttribut-taggen ovenformetode

Løpsresultat:

length(C++)=24
lengde(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Gå for å skyte ondskap på fjellene!
54321
De er alle døde!

For det tredje, en forklaring av flere nøkkelord i C/C++

_declspec

__stdcall

Ekstern


"C"
(dllexport) eksporterer fra DLL-en ved hjelp av __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Foregående:Bygg en e-postserver med Winmail
Neste:C# Dynamisk tilstandsreferanse DLL-metode (Gjenutgivelse)
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com