Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 19233|Svar: 0

[WinForm] Hur man anropar metoder i C/C++ DLL:er i C#

[Kopiera länk]
Publicerad på 2015-02-05 20:52:39 | | | |

Först, skapa ett C++ DLL-projekt



Ändra CPPTest.cpp för att läsa:

CPPTest.cpp : Definierar ingångspunkten för DLL-applikationen.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma klarade (tryck, av)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
returnera TRUE;
}
extern "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)
{
återvända A+B;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
använda namnrymden STD;
Cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="De är alla döda!";
}
}

#ifdef _MANAGED
#pragma managed(pop)
#endif


2. Skapa ett C#-testprojekt


Ändra programmets innehåll till:

med System;
med System.Collections.Generic;
med System.Text;
använda System.Runtime.InteropServices;

namnrymden ConsoleApplicationTestCSharp
{
Klassprogram
{
[DllImport("CPPTest.dll")]
statisk extern int GetStringLength (ref string str);

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

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

statiskt tomrum Main(string[] args)
{
strängtestSträng = "HAHA! Jag är en teststräng";

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å och skjut onda på bergen!";
StructTest (referenser);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequentiell)]
publik struktur TestStruct
{
offentlig int i;
offentlig strängstyrka;
}
}
}

Notera taggen DllImportAttribute ovanmetod

Resultat av löpning:

längd(C++)=24
längd(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Gå och skjut onda på bergen!
54321
De är alla döda!

För det tredje, en förklaring av flera nyckelord i C/C++

_declspec

__stdcall

extern


"C"
(dllexport) exporterar från DLL med hjälp av __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Föregående:Bygg en e-postserver med Winmail
Nästa:C# Dynamisk tillståndsreferens DLL-metoden (Återtryck)
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com