求助:MFC中dll静态加载提示 error LNK2001: unresolved external symbol

Ahh_Freshmeat 2012-10-31 10:10:54
我在DLL里面 写了
//R.h
#define R_API __stdcall
extern "C" int R_API R_Open(void);
并写了def文件来声明为导出函数

R_Open @1


然后在MFC程序头文件里做如下声明:(R.lib和R.dll已拷贝到当前程序)
#include "R.h"
#pragma comment (lib, "R.lib")

#define R_API_Import __declspec(dllimport)

extern "C" RPU_API_Import RPU_Open(void);

并在MFC程序中直接调用R_Open


结果编译的时候出现:
Linking...
R_TestDlg.obj : error LNK2001: unresolved external symbol __imp__R_Open



在网上找了好一会 也没解决 只有来这里求大家给帮忙看看了,谢谢啦。
...全文
242 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ahh_Freshmeat 2012-10-31
  • 打赏
  • 举报
回复
问题 已解决 感谢 各位

菜鸟啊 __stdcall不是在文件里面来写 而是在VC里面设置,悲剧。
iarate 2012-10-31
  • 打赏
  • 举报
回复
老弟啊,跑下向导生成的导出什么的例子
Ahh_Freshmeat 2012-10-31
  • 打赏
  • 举报
回复
嗯 我知道,现在的问题是 我要在头文件里面 声明函数为__stdcall调用,然后为导出函数,总不能这么写吧,extern "C" int __stcall __declspec(dllexport) R_Open(void); ?


如何在头文件里面 定义函数为__stdcall调用,并且为导出函数呢?





[Quote=引用 10 楼 的回复:]

你看下向导生成的导出的例子吧

dll 里面有宏定义是导出,没有宏定义是导入

没必要一个接口还整2遍定义,累啊

头文件是干啥的,就是干这个的啊
[/Quote]
iarate 2012-10-31
  • 打赏
  • 举报
回复
你看下向导生成的导出的例子吧

dll 里面有宏定义是导出,没有宏定义是导入

没必要一个接口还整2遍定义,累啊

头文件是干啥的,就是干这个的啊
Ahh_Freshmeat 2012-10-31
  • 打赏
  • 举报
回复

因为R.H里面是定义为导出函数

后面定义是声明为导入函数

[Quote=引用 6 楼 的回复:]

#include "R.h"

这个里面已经有定义了
为啥还要定义一遍?
[/Quote]
Ahh_Freshmeat 2012-10-31
  • 打赏
  • 举报
回复

谢谢 在.h文件声明导出,如何声明__stdcall的导出函数呢?

这样写吗,extern "C" int __stcall __declspec(dllexport) R_Open(void); ?



[Quote=引用 7 楼 的回复:]

并写了def文件来声明为导出函数

R_Open @1
该函数导出为__imp__R_Open@1,把def去掉,.h中直接声明导出即可。另外,你的函数居然没有返回!
[/Quote]
iamcomboy 2012-10-31
  • 打赏
  • 举报
回复
并写了def文件来声明为导出函数

R_Open @1

该函数导出为__imp__R_Open@1,把def去掉,.h中直接声明导出即可。另外,你的函数居然没有返回!
iarate 2012-10-31
  • 打赏
  • 举报
回复
#include "R.h"

这个里面已经有定义了
为啥还要定义一遍?

Ahh_Freshmeat 2012-10-31
  • 打赏
  • 举报
回复
//R.h
#define R_API __stdcall
extern "C" int R_API R_Open(void);
并写了def文件来声明为导出函数

R_Open @1


然后在MFC程序头文件里做如下声明:(R.lib和R.dll已拷贝到当前程序)
#include "R.h"
#pragma comment (lib, "R.lib")

#define R_API_Import __declspec(dllimport)

extern "C" R_API_Import R_Open(void);

并在MFC程序中直接调用R_Open


结果编译的时候出现:
Linking...
R_TestDlg.obj : error LNK2001: unresolved external symbol __imp__R_Open
Ahh_Freshmeat 2012-10-31
  • 打赏
  • 举报
回复
DLL的静态加载啊。



[Quote=引用 1 楼 的回复:]

lib?dll?你到底要做什么
[/Quote]
Ahh_Freshmeat 2012-10-31
  • 打赏
  • 举报
回复
不好意思 我复制过来编辑错了,这个我检查过,书写没问题的。

还有其他可能吗?


[Quote=引用 2 楼 的回复:]

用 depends 工具看下dll 导出函数名有没有问题
从 连接错误来看

extern "C" RPU_API_Import RPU_Open(void);

这个声明好像写错了吧

应该是

extern "C" RPU_API_Import R_Open(void);
[/Quote]
iarate 2012-10-31
  • 打赏
  • 举报
回复
用 depends 工具看下dll 导出函数名有没有问题
从 连接错误来看

extern "C" RPU_API_Import RPU_Open(void);

这个声明好像写错了吧

应该是

extern "C" RPU_API_Import R_Open(void);

paldier 2012-10-31
  • 打赏
  • 举报
回复
lib?dll?你到底要做什么

15,471

社区成员

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

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