Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 19233|Απάντηση: 0

[Φόρμα Win] Πώς να καλέσετε μεθόδους σε C/C++ DLL σε C#

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 5/2/2015 8:52:39 μ.μ. | | | |

Αρχικά, δημιουργήστε ένα έργο DLL C++



Τροποποιήστε CPPTest.cpp ως εξής:

CPPTest.cpp : Καθορίζει το σημείο εισόδου για την εφαρμογή DLL.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma διαχείριση (push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
επιστροφή TRUE?
}
εξωτερικό "C"
{

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

_declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{
επιστροφή strlen(str);
}

_declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{
επιστροφή a+b;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
χρησιμοποιώντας τον χώρο ονομάτων std.
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Είναι όλοι νεκροί!";
}
}

#ifdef _MANAGED
#pragma managed (pop)
#endif


2. Δημιουργήστε ένα δοκιμαστικό έργο C#


Τροποποιήστε το περιεχόμενο του Προγράμματος ώστε:

χρησιμοποιώντας το Σύστημα.
χρησιμοποιώντας το System.Collections.Generic.
χρησιμοποιώντας το System.Text.
χρησιμοποιώντας το System.Runtime.InteropServices.

χώρος ονομάτων ConsoleApplicationTestCSharp
{
Πρόγραμμα τάξης
{
[DllImport("CPPTest.dll")]
στατικό εξωτερικό int GetStringLength(ref string str);

[DllImport("CPPTest.dll")]
στατικό εξωτερικό int AddTwoNumber(int a, int b);

[DllImport("CPPTest.dll")]
στατικό εξωτερικό κενό StructTest(ref TestStruct s);

στατικό κενό Main(string[] args)
{
string testString = "ΧΑΧΑ! Είμαι μια δοκιμαστική χορδή».

Console.WriteLine("μήκος(C++)=" + GetStringLength(ref testString). ToString());
Console.WriteLine("μήκος(C#)=" + testString.Length.ToString());
Console.WriteLine("a+b(C++)=" + AddTwoNumber(10, 1000));
Console.WriteLine("a+b(C#)=" + (10 + 1000));

TestStruct s = νέα TestStruct();
s.i = 12345;
s.str = "Πήγαινε να πυροβολήσεις κακά σε βουνά!";
StructTest(ref s);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Κονσόλα.ReadKey();
}

[StructLayout(LayoutKind.Sequential)]
δημόσια δομή TestStruct
{
δημόσιο int i;
δημόσια χορδή str;
}
}
}

Σημειώστε την ετικέτα DllImportAttribute παραπάνωμέθοδος

Αποτέλεσμα εκτέλεσης:

μήκος(C++)=24
μήκος(C#)=24
a+b(C++)=1010
α+β(C#)=1010
12345
Πηγαίνετε να πυροβολήσετε κακά σε βουνά!
54321
Είναι όλοι νεκροί!

Τρίτον, μια επεξήγηση πολλών λέξεων-κλειδιών σε C/C++

_declspec

__stdcall

εξωτερικός


"ντο"
(dllexport) εξάγει από το DLL χρησιμοποιώντας __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Προηγούμενος:Δημιουργήστε έναν διακομιστή αλληλογραφίας με το Winmail
Επόμενος:Μέθοδος DLL αναφοράς δυναμικής κατάστασης C# (Επανεκτύπωση)
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com