游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2263|回复: 2

编写DLL中的一个疑惑 ?

[复制链接]

10

主题

24

帖子

24

积分

注册会员

Rank: 2

积分
24
发表于 2011-9-4 08:20:00 | 显示全部楼层 |阅读模式
编写DLL中的一个疑惑 ?

使用vc6.0开发,VC++默认采用__cdecl的调用方式。
C方式编译下:
     __cdecel 函数修饰符格式"_函数名"
     __stdcall函数修饰符格式"_函数名@参数字节数"
dll中这样声明导出函数
extern "C" int  __declspec(dllexport)   add(int x, int y);
导出的函数名应该是 _add,实际却是 add,与规则不符,为什么。
extern "C" int  __declspec(dllexport) __stdcall   add(int x, int y);
导出的函数名是 _add@8与规则相符。
__stdcall还有就是stdcall前一个下划线或是两个下划线都编译正常,这是怎么回事 ?

1

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2011-9-8 14:35:00 | 显示全部楼层

Re: 编写DLL中的一个疑惑 ?

extern "C" int  __declspec(dllexport)   add(int x, int y);
导出的名字是add没问题啊,谁说是_add呢?
我们经常有这样的应用:
hModule=LoadLibrary("testC.dll");
pFunc func=GetProcAddress(hModule,"TestFunc");
TestFunc就是testC.dll中按_cdecl导出的函数名.不会有前缀“_”的。

6

主题

74

帖子

230

积分

中级会员

Rank: 3Rank: 3

积分
230
发表于 2011-9-11 20:56:00 | 显示全部楼层

Re:编写DLL中的一个疑惑 ?

最好用#pragma comment(linker,"/export:xxx")

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-5 17:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表