轉自http://www.cppblog.com/amyvmiwei/archive/2008/01/02/40203.html
DLL中導出函數的聲明有兩種方式:一種為在函數聲明中加上__declspec(dllexport),這里不再舉例說明;另外一種方式是采用模塊定義(.def) 文件聲明,.def文件為鏈接器提供了有關被鏈接程序的導出、屬性及其他方面的信息。
首先創建 一個DLL程序,.cpp中
int __stdcall Add(int numa, int numb)
{
return (numa + numb);
}
int __stdcall Sub(int numa, int numb)
{
return (numa - numb);
}
然后創建一個.def的文件,在里面加上
;DllTestDef.lib : 導出DLL函數
;作者:----
LIBRARY DllTestDef
EXPORTS
Add @ 1
Sub @ 2
最后創建一個測試程序:.cpp文件如下:
#include <iostream>
#include <windows.h>
using namespace std;
typedef int (__stdcall *FUN)(int, int);
HINSTANCE hInstance;
FUN fun;
int main()
{
hInstance = LoadLibrary("DLLTestDef.dll");
if(!hInstance)
cout << "Not Find this Dll" << endl;
fun = (FUN)GetProcAddress(hInstance, MAKEINTRESOURCE(1));
if (!fun)
{
cout << "not find this fun" << endl;
}
cout << fun(1, 2) << endl;
FreeLibrary(hInstance);
return 0;
}
說明:
.def文件的規則為:
(1)LIBRARY語句說明.def文件相應的DLL;
(2)EXPORTS語句后列出要導出函數的名稱。可以在.def文件中的導出函數名后加@n,表示要導出函數的序號為n(在進行函數調用時,這個序號將發揮其作用);
(3).def 文件中的注釋由每個注釋行開始處的分號 (;) 指定,且注釋不能與語句共享一行。