生成 dll 文件時的函數名字問題

dll 文件中函數名字規則 寫道
extern "C" :用於.cpp文件聲明不改編

_stdcall :add變爲:_add@8
               :add不變

cpp文件沒有聲明extern "C"
_stdcall :add變爲:?add@@YGHHH@Z
               :add變爲:?add@@YAHHH@Z


調用:
HINSTANCE hInst;

// hInst=LoadLibrary("lib.dll");
// hInst=LoadLibrary("mylib.dll"); 
hInst=LoadLibrary("mylib1.dll");

// typedef int ( _stdcall *ADDPROC)(int a, int b);
// typedef int ( _stdcall *ADDPROC)(int a, int b); 
typedef int ( *ADDPROC)(int a, int b);

// ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"_add@8");
// ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"_Java_com_ldq_ExJNI_add@16");
ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"?add@@YAHHH@Z");

// ADDPROC Add=(ADDPROC)GetProcAddress(hInst,MAKEINTRESOURCE(1));
k=Add(i,j);


代碼:lib1.c
_declspec (dllexport) int _stdcall add(int i, int j)
{
return i+j;
}
命令:cl /LD lib1.c
生成:lib1.dll
命令:dumpbin -exports lib1.dll
函數名:_add@8

代碼:lib2.c
_declspec (dllexport) int add(int i, int j)
{
return i+j;
}
命令:cl /LD lib2.c
生成:lib2.dll
命令:dumpbin -exports lib2.dll
函數名:add

代碼:lib1.cpp
_declspec (dllexport) int _stdcall add(int i, int j)
{
return i+j;
}
命令:cl /LD lib1.cpp
生成:lib1.dll
命令:dumpbin -exports lib1.dll
函數名:?add@@YGHHH@Z

代碼:lib2.cpp
_declspec (dllexport) int add(int i, int j)
{
return i+j;
}
命令:cl /LD lib2.cpp
生成:lib2.dll
命令:dumpbin -exports lib2.dll
函數名:?add@@YAHHH@Z

代碼:lib3.cpp
extern "C" _declspec (dllexport) int _stdcall add(int i, int j)
{
return i+j;
}
命令:cl /LD lib3.cpp
生成:lib3.dll
命令:dumpbin -exports lib3.dll
函數名:_add@8

代碼:lib4.cpp
extern "C" _declspec (dllexport) int add(int i, int j)
{
return i+j;
}
命令:cl /LD lib4.cpp
生成:lib4.dll
命令:dumpbin -exports lib4.dll
函數名:add

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章