?在VC++中,如果生成DLL可以不使用.def文件。你只需要在VC++的函數(shù)定義前要加__declspec
(dllexport)修飾就可以了。但是使用__declspec(dllexport)和使用.def文件是有區(qū)別的。如果你的DLL是提供給VC+
+用戶使用的,你只需要把編譯DLL時產(chǎn)生的.lib提供給用戶,它可以很輕松地調(diào)用你的DLL。但是如果你的DLL是供VB、PB、Delphi用戶使
用的,那么會產(chǎn)生一個小麻煩。因為VC++對于__declspec(dllexport)聲明的函數(shù)會進(jìn)行名稱轉(zhuǎn)換,如下面的函數(shù):
????__declspec(dllexport) int __stdcall IsWinNT()
????會轉(zhuǎn)換為IsWinNT@0,這樣你在VB中必須這樣聲明:
????Declare Function IsWinNT Lib "my.dll" Alias "IsWinNT@0" () As Long
????@的后面的數(shù)由于參數(shù)類型不同而可能不同。這顯然不太方便。所以如果要想避免這種轉(zhuǎn)換,就要使用.def文件方式。
????EXPORTS后面的數(shù)可以不給,系統(tǒng)會自動分配一個數(shù)。對于VB、PB、Delphi用戶,通常使用按名稱進(jìn)行調(diào)用的方式,這個數(shù)關(guān)系不大,但是對于使用.lib鏈接的VC程序來說,不是按名稱進(jìn)行調(diào)用,而是按照這個數(shù)進(jìn)行調(diào)用的,所以最好給出。