extern 不管用了么?

mocom 2010-08-09 09:27:33
my_dll.h声明了一个extern函数
extern void test();

my_dll.c里创建了函数
void test() {
printf("test\r\n");
}
编译链接获得my_dll.dll和my_dll.lib

test.c里
#include "my_dll.h"

extern void test();

void test() {
printf("Hello World!");
}

int main() {
test();
return 0;
}

编译test.c,link my_dll.lib获得test.exe,运行结果输出test,而不是Hello World!,难道链接参数有问题么?
...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
will_g 2010-08-15
  • 打赏
  • 举报
回复
把库链接进来 #pragma comment(lib,"libname.lib")
mocom 2010-08-11
  • 打赏
  • 举报
回复
楼上的朋友用了什么参数,能不能黏贴上来的看看,我用的CodeBlocks默认的设置,估计是没有设置哪个参数
oyljerry 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mocom 的回复:]

那dll怎么引用外部函数呢?例如dll里有这么一个函数

void aaa() {
bbb();//这个函数必须从外部引用过来
}
[/Quote]
添加对应的源代码进工程...
sunlin7 2010-08-10
  • 打赏
  • 举报
回复
我这里编译后运行显示Hello world.

楼主可能是编译和链接时的参数有问题或者程序没有被更新。
Simao 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
即使有效,你也不可能定义一个函数原型完全一样的函数,所以你这个测试本来就不合理。

extern只说有这么个函数,实际这个函数可以是内部定义,也可以外部定义。如果你想用外部的,你必须把外部库链接进程序才行(也就是必须把my_dll.lib链接进来。

而为了让它正常工作,你必须删除你main上面那个test,两个test函数不允许共存
[/Quote]
up
mocom 2010-08-10
  • 打赏
  • 举报
回复
那dll怎么引用外部函数呢?例如dll里有这么一个函数

void aaa() {
bbb();//这个函数必须从外部引用过来
}
oyljerry 2010-08-09
  • 打赏
  • 举报
回复
c里要用命名来区分,不要搞一个名字。
arong1234 2010-08-09
  • 打赏
  • 举报
回复
即使有效,你也不可能定义一个函数原型完全一样的函数,所以你这个测试本来就不合理。

extern只说有这么个函数,实际这个函数可以是内部定义,也可以外部定义。如果你想用外部的,你必须把外部库链接进程序才行(也就是必须把my_dll.lib链接进来。

而为了让它正常工作,你必须删除你main上面那个test,两个test函数不允许共存

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧