社区
C++ Builder
帖子详情
BCB中编译的动态库,为什么函数导出表中的函数名开头都有一个下划线呢?
acqy
2005-07-29 08:52:43
例如:
extern "C" __declspec(dllexport) int Add2(int x, int y)
{
return x+y;
}
但是我用VS的dumpbin命令查看生成的DLL时,函数表中所有函数前面都有一个下划线。比如上面的函数在导出表中就是“_Add2”,为什么呢?
...全文
302
6
打赏
收藏
BCB中编译的动态库,为什么函数导出表中的函数名开头都有一个下划线呢?
例如: extern "C" __declspec(dllexport) int Add2(int x, int y) { return x+y; } 但是我用VS的dumpbin命令查看生成的DLL时,函数表中所有函数前面都有一个下划线。比如上面的函数在导出表中就是“_Add2”,为什么呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
僵哥
2005-07-30
打赏
举报
回复
声明为__stdcall就好了
extern "C" _declspec(dllexport) int _stdcall RegisterDll(PChar File,bool Register)
xili
2005-07-30
打赏
举报
回复
用vc的工具吧, 对准dll做一下,生成一个新的 lib
acqy
2005-07-29
打赏
举报
回复
我LoadLibrary以及GetProcAddress的时候岂不是也要加这个下划线?
acqy
2005-07-29
打赏
举报
回复
有没有办法去掉这个下划线?
FengSC
2005-07-29
打赏
举报
回复
正常正常,这是标准C的语法,是一种约定
Waiting4you
2005-07-29
打赏
举报
回复
加个__stdcall再试试
C++Builder调用vs2010演示代码
1)VsDll为vs2010工程,
编译
生成
动态库
。 2)
BCB
Call为
bcb
工程,调用
动态库
3)Viewdll.exe为查看DLL
导出
文件的工具。 注意事项一: VSDll里面有
一个
KpHttps.def LIBRARY "KpHttps" EXPORTS InitKpHttp Project > Properties... > Linker > Input > Module Definition File 里面加入你刚才的KpHttps.def文件,重新
编译
就行了。出来的InitKpHttp
函数
前面没有
下划线
,后面没有@8或者@ABCDEF之类的。 注意事项二: 用C++Builder的implib工具生成DLL对应的lib文件。如:implib xx.lib xxx.dll。 生成lib文件之后,C++Builder便可以使用这个lib文件了。 注意事项三: 文件头的声明应该完全一样,否则(呵呵),会出现链接错误。 #ifdef DLL_API #define DLL_API extern "C" _declspec(dllexport) #else #define DLL_API extern "C" _declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif DECLDIR int __stdcall InitKpHttp(void); DECLDIR int UnInitKpHttp(void); DECLDIR int KpHttpRequest(char *strurl,char *strhost,char *strresult,int &resultle;); DECLDIR int KpHttpsRequest(char *strurl,char *strhost,char *strresult,int &resultle;); DECLDIR int KpHttpPost(char *strurl,char *strhost,char *strPost,int postlen,char *strresult,int &resultle;); DECLDIR int KpHttpsPost(char *strurl,char *strhost,char *strPost,int postlen,char *strresult,int &resultle;); DECLDIR int KpUpLoadFile(char *strurl,char *strhost,char *filebuf,int filelen,char *strresult,int &resultle;); DECLDIR int KpDownLoadFile(char *strurl,char *strhost,char *filebuf,int &filelen;,char *strresult,int &resultle;); #ifdef __cplusplus } #endif
BCB
调用VC的DLL(补充)
之前的博文: https://blog.csdn.net/phy0292/article/details/52531983 讲到了
BCB
如何调用VC
编译
的DLL,做一下补充。 有时VC
编译
DLL后,用coff2omf把它的LIB文件转换成
BCB
的LIB还是无法使用,原因是
BCB
要求LIB
中
的C
函数
名
要有
下划线
开头
,而VC有时设置
编译
时
导出
的
函数
没有以
下划线
开头
,所以
BCB
链接时会提示没有这些函...
BCB
怎么调用DLL
中
的
函数
推荐你看《
BCB
编写DLL终极手册》这篇文章如下片段:二. 静态调用 DLL使用 $
BCB
path\Bin\implib.exe 生成 Lib 文件,加入到工程文件
中
将该文件拷贝到当前目录,使用 implib MyDll.lib MyDll.dll 生成// Unit1.h // TForm1 定义#include "DllForm.h" // TDllFrm 定义//--------...
BCB
编写DLL
一.注意: 创建动态链接库时,如果想你创建的动态链接库并非只用于Borland开发工具,那么就需要遵循发下规则: (1).在
导出
函数
的返回值和参数
中
不要使用Borland特有的数据类型和结构体,如AnsiString之类,请使用C/C++标准的数据类型或使用 C/C++标准数据类型定义的结构体(特别不要使用String数据类型,
BCB
DLL向导生成的DLL工程文件
中
大篇幅的说明就是...
c语言唯一
一个
不能被别的
函数
调用,VC C/C++
函数
调用约定(最全)
函数
调用约定常见的
函数
调用约定[5]:cdecl,stdcall,fastcall,thiscall,naked callMFC调用约定(VS6:Project Settings->C/C++ Calling convention:)1, __cdecl(C调用约定.The C default calling convention)C/C++ 缺省调用方式1)压栈顺序:
函数
参数从右到左2)参...
C++ Builder
13,871
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章