生成 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值