Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 19233|Yanıt: 0

[WinForm] C# dilinde C/C++ DLL'lerde metotlar nasıl çağrılır?

[Bağlantıyı kopyala]
Yayınlandı 5.02.2015 20:52:39 | | | |

İlk olarak, bir C++ DLL projesi oluşturun



CPPTest.cpp şöyle değiştirin:

CPPTest.cpp : DLL uygulamasının giriş noktasını tanımlar.
//
#include "stdafx.h"
#include

#ifdef _MANAGED
#pragma başardı (it, kapat)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
dışa "C"
{

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

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

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

_declspec(dllexport) void __stdcall StructTest(TestStruct&s)
{
isim alanı STD kullanılarak;
cout<<s.i<<endl;
cout<<s.str<<endl;
s.i=54321;
s.str="Hepsi öldü!";
}
}

#ifdef _MANAGED
#pragma yönetildi(pop)
#endif


2. Bir C# test projesi oluşturun


Program içeriğini şu şekilde değiştirin:

System kullanmak;
System.Collections.Generic kullanılarak;
System.Text kullanarak;
System.Runtime.InteropServices kullanarak;

namespace ConsoleApplicationTestCSharp
{
Sınıf Programı
{
[DllImport("CPPTest.dll")]
statik dış dış int GetStringLength (referans string str);

[DllImport("CPPTest.dll")]
statik dış dış int AddTwoNumber(int a, int b);

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

statik boşluk Ana (dize[] args)
{
string testString = "HAHA! Ben bir test stiliyim";

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 = yeni TestStruct();
s.i = 12345;
s.str = "Dağlara kötülükleri vurmaya git!";
StructTest (referans s);
Console.WriteLine(s.i);
Console.WriteLine(s.str);
Console.ReadKey();
}

[Yapı Düzeni(Düzen Türü.Dizilimi)]
public struct TestStruct
{
kamu int i;
halka açık yaylı str;
}
}
}

Yukarıdaki DllImportAttribute etiketine dikkat edinyöntem

Koşu sonucu:

uzunluk(C++)=24
length(C#)=24
a+b(C++)=1010
a+b(C#)=1010
12345
Dağlarda kötülükleri vurmaya gidin!
54321
Hepsi öldü!

Üçüncü olarak, C/C++ dilinde birkaç anahtar kelimenin açıklaması

_declspec

__stdcall

dış kaynak


"C"
(dllexport) DLL'den __declspec (dllexport) kullanılarak ihraç edilir.
</s.str<<endl;
</s.i<<endl;




Önceki:Winmail ile bir posta sunucusu kurmak
Önümüzdeki:C# Dinamik Durum Referans DLL Yöntemi (Yeniden Baskı)
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com