Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 19233|Jawab: 0

[Formulir Menang] Cara memanggil metode di DLL C/C++ di C#

[Salin tautan]
Diposting pada 05/02/2015 20.52.39 | | | |

Pertama, buat proyek DLL C++



Ubah CPPTest.cpp untuk membaca:

CPPTest.cpp : Menentukan titik masuk untuk aplikasi DLL.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma dikelola (dorong, mati)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpDicadangkan
)
{
mengembalikan TRUE;
}
ekstern "C"
{

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

_declspec(dllexport) size_t __stdcall GetStringLength(char* & str)
{
mengembalikan strlen(str);
}

_declspec(dllexport) int __stdcall AddTwoNumber(const int a,const int b)
{
mengembalikan a+b;
}

_declspec(dllexport) void __stdcall StructTest(TestStruct& s)
{
menggunakan namespace std;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i = 54321;
s.str="Mereka semua sudah mati!";
}
}

#ifdef _MANAGED
#pragma dikelola(pop)
#endif


2. Buat proyek uji coba C#


Ubah konten Program menjadi:

menggunakan Sistem;
menggunakan System.Collections.Generic;
menggunakan System.Text;
menggunakan System.Runtime.InteropServices;

namespace ConsoleApplicationTestCSharp
{
Program kelas
{
[dllImport("CPPTest.dll")]
statis extern int GetStringLength(ref string str);

[dllImport("CPPTest.dll")]
statis luar biasa int AddTwoNumber(int a, int b);

[dllImport("CPPTest.dll")]
statis luar biasa void StructTest (ref TestStruct s);

static void Main(string[] args)
{
string testString = "HAHA! Saya adalah string uji";

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 = TestStruct(); baru
s.i = 12345;
s.str = "Pergi untuk menembak kejahatan di gunung!";
StructTest(ref s);
Konsol.WriteLine(s.i);
Console.WriteLine(s.str);
Konsol.BacaKunci();
}

[StructLayout(LayoutKind.Sequential)]
struktur publik TestStruct
{
publik int i;
senar publik str;
}
}
}

Perhatikan tag DllImportAttribute di atasMetode

Hasil jalan:

panjang (C++) = 24
panjang (C #) = 24
a+b(C++)=1010
a+b(C#)=1010
12345
Pergi untuk menembak kejahatan di gunung!
54321
Mereka semua sudah mati!

Ketiga, penjelasan beberapa kata kunci dalam C/C++

_declspec

__stdcall

luar


"C"
(dllexport) dari DLL menggunakan __declspec (dllexport).
</s.str<<endl;
</s.i<<endl;




Mantan:Membangun server email dengan Winmail
Depan:Metode DLL Referensi Status Dinamis C# (Cetak Ulang)
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com