Aracılığıyla paylaş


Visual Basic Uygulamasından DLL İşlevi Çağırma

Visual Basic uygulamalarının (veya Pascal veya Fortran gibi diğer dillerdeki uygulamaların) C/C++ DLL'sindeki işlevleri çağırması için, işlevlerin derleyici tarafından herhangi bir ad düzenlemesi yapılmadan doğru çağrı kuralı kullanılarak dışarı aktarılması gerekir

__stdcall işlevi için doğru çağrı kuralını oluşturur (çağrılan işlev yığını temizler ve parametreler sağdan sola geçirilir) ancak işlev adını farklı şekilde süsler. Bu nedenle, __declspec(dllexport) DLL'de dışarı aktarılan bir işlevde kullanıldığında, dekore edilmiş ad dışarı aktarılır.

Ad düzenlemesi __stdcall , simge adına bir alt çizgi ( _ ) ekler ve simgeyi bir at işareti (@) karakteriyle ekler ve ardından bağımsız değişken listesindeki bayt sayısını (gerekli yığın alanı) ekler. Sonuç olarak, şu şekilde bildirildiğinde işlev:

int __stdcall func (int a, double b)

çıkışta olduğu gibi _func@12 dekore edilmiştir.

C çağırma kuralı (__cdecl), adı olarak _funcsüsler.

Süslü adı almak için /MAP kullanın. kullanımı __declspec(dllexport) aşağıdakileri yapar:

  • İşlev C çağırma kuralı__cdecl () ile dışarı aktarılırsa, ad dışarı aktarıldığında baştaki alt çizgiyi ( _ ) soyar.

  • Dışarı aktarılan işlev C çağırma kuralını (örneğin, ) kullanmıyorsa, __stdcallsüslü adı dışarı aktarır.

Yığın temizleme işleminin gerçekleştiği yeri geçersiz kılmanın bir yolu olmadığından kullanmanız __stdcallgerekir. ile __stdcalladların dekorasyonunu çözmek için , .def dosyasının EXPORTS bölümünde diğer adları kullanarak bunları belirtmeniz gerekir. Bu, aşağıdaki işlev bildirimi için aşağıdaki gibi gösterilir:

int  __stdcall MyFunc (int a, double b);
void __stdcall InitCode (void);

İçinde. DEF dosyası:

EXPORTS
   MYFUNC=_MyFunc@12
   INITCODE=_InitCode@0

DLL'lerin Visual Basic'te yazılmış programlar tarafından çağrılacağı için, bu konuda gösterilen diğer ad tekniği .def dosyasında gereklidir. Diğer ad Visual Basic programında yapılırsa, .def dosyasında diğer ad kullanılması gerekli değildir. Bu, Declare deyimine bir diğer ad yan tümcesi eklenerek Visual Basic programında yapılabilir.

Ne hakkında daha fazla bilgi edinmek istiyorsunuz?

Ayrıca bkz.

Visual Studio'da C/C++ DLL'leri oluşturma