Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 19233|Antwort: 0

[WinForm] Wie man Methoden in C/C++ DLLs in C# aufruft

[Link kopieren]
Veröffentlicht am 05.02.2015 20:52:39 | | | |

Zuerst erstelle ein C++-DLL-Projekt



Ändern Sie CPPTest.cpp, um zu lesen:

CPPTest.cpp : Definiert den Einstiegspunkt für die DLL-Anwendung.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma geschafft (abdrücken, abdrücken)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
externes "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)
{
Zurück A+B;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
Verwendung von Namespace STD;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Sie sind alle tot!";
}
}

#ifdef _MANAGED
#pragma managed(pop)
#endif


2. Erstellen Sie ein C#-Testprojekt


Ändern Sie den Programminhalt zu:

mit System;
mit System.Collections.Generic;
mit System.Text;
Verwendung von System.Runtime.InteropServices;

Namespace ConsoleApplicationTestCSharp
{
Klassenprogramm
{
[DllImport("CPPTest.dll")]
statischer externer int GetStringLength (ref string str);

[DllImport("CPPTest.dll")]
statische externe Int AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
statischer externer Void StructTest (ref TestStruct s);

statisches Void Haupt(string[] args)
{
string testString = "HAHA! Ich bin eine Test-Saite";

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 = neuer TestStruct();
s.i = 12345;
s.str = "Geh, um Übel auf Berge zu schießen!";
StructTest (ref s);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[StructLayout(LayoutKind.Sequentiell)]
öffentliche struct TestStruct
{
öffentliche Int I;
öffentliche Saitenstärke;
}
}
}

Beachten Sie das oben genannte DllImportAttribut-TagMethode

Laufergebnis:

length(C++)=24
length(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Geh, um auf Berge Böse zu schießen!
54321
Sie sind alle tot!

Drittens eine Erklärung mehrerer Schlüsselwörter in C/C++

_declspec

__stdcall

extern


"C"
(dllexport) exportiert von der DLL mit __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Vorhergehend:Bauen Sie einen Mail-Server mit Winmail
Nächster:C# Dynamic State Reference DLL-Methode (Nachdruck)
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com