创建DLL的问题。在线等。。。。

tht228 2009-09-22 03:34:02
我创建了一个DLL工程,MyDll,在MyDll.cpp 最后写了一个函数

int Max(int a, int b)
{
if (a<=b)
{
a = b;
}
return a;
}

意思就是比较大小。
在MyDll.h里写了这些

extern "C" _declspec(dllexport) int Max(int a, int b);
extern "C" _declspec(dllexport) int Min(int a, int b);

.def里没写东西、
生成库。 大家先看看这里有没有什么问题?

然后我又新建了一个工程,基于对话框的,将上个一工程生成的MyDll.dll 和 MyDll.lib这两个文件拷进了这个工程的目录下
里面就一个按钮,

void CMyUseDllDlg::OnButton1()
{
int i;
i = Max(1,2);

}

为什么提示 Max这个函数没定义啊?

错在什么地方了?
...全文
130 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈利路亚1874 2009-10-16
  • 打赏
  • 举报
回复
这个必须包含DLL文件的头文件,把lib文件也加入LINKER中!
trytryliu 2009-10-16
  • 打赏
  • 举报
回复
#pragma comment(lib, "MyDll.lib")
extern "C" _declspec(dllimport) int Max(int a, int b);
extern "C" _declspec(dllimport) int Min(int a, int b);
在测试工程中加入一个上面的头文件,
再在测试文件的.cpp中包含此文件就可以 了!
huangcuicui5 2009-10-16
  • 打赏
  • 举报
回复
1、把生成的Lib,dll文件复制到测试工程目录下;

2、在测试工程中新建一个头文件A,代码为:
extern "C" _declspec(dllimport) int Max(int a, int b);
extern "C" _declspec(dllimport) int Min(int a, int b);

3、在测试文件中添加以下代码:
#include"A.h"
#pragma comment(lib, "MyDll.lib")


上面的步骤是隐式链接,你也可以选择显示链接,具体方法就不说了
必成桂 2009-10-09
  • 打赏
  • 举报
回复
extern “C”的问题啊,extern "C"是为了c里面的函数能够调用c++定义的函数。

c++本身存在name mangling。(名字重整).编译器会修改函数名。

使用的时候,声明 extern "C" _declspec(dllimport) int Max(int a, int b);
如果是隐式调用的话,你只需在Project->dependency中设置两个工程的关联就行了。




火星人克洛 2009-10-08
  • 打赏
  • 举报
回复
我也试过了,貌似是应为lib不能连接上,求各位大大指教啊
rainbow8714 2009-10-08
  • 打赏
  • 举报
回复
mydll.cpp添加头文件mydll.h,然后通过LoadLibrary加载.
ccc_cgreen 2009-10-07
  • 打赏
  • 举报
回复
extern "C" _declspec(dllexport) int Max(int a, int b);
extern "C" _declspec(dllexport) int Min(int a, int b);
将extern "C" 去掉,你这样写,名字就会被改编成Max和Min了。而你主工程的名字还是(?Max@@YAHHH@Z) 所以找不到啊。
另外还有一种通过LoadLibrary加载Max函数也可以。
DeadManWalk 2009-09-23
  • 打赏
  • 举报
回复
项目-》属性-》链接器-》输入-》附加依赖项-》MyDll.lib。头文件可以不加
福尔摩丝 2009-09-22
  • 打赏
  • 举报
回复
Sorry,忘记加双引号了,在程序中添加如下代码即可:


#pragma comment(lib, "MyDll.lib")
clever101 2009-09-22
  • 打赏
  • 举报
回复




#include "MyDll.h"

void CMyUseDllDlg::OnButton1()
{
int i;
i = Max(1,2);

}



同时配置lib文件的路径。




gaoxiaowei 2009-09-22
  • 打赏
  • 举报
回复
又是这个问题,MyDll.lib没有加入编译环境中。。
RichyMong 2009-09-22
  • 打赏
  • 举报
回复
这是link错误,不是编译错误啊。你要把库文件加进来
福尔摩丝 2009-09-22
  • 打赏
  • 举报
回复
#pragma comment(lib, MyDll.lib)
LongZT007 2009-09-22
  • 打赏
  • 举报
回复
你是怎么加载DLL到工程中去的呢?
tht228 2009-09-22
  • 打赏
  • 举报
回复
Linking...
MyUseDllDlg.obj : error LNK2001: unresolved external symbol "int __cdecl Max(int,int)" (?Max@@YAHHH@Z)
Debug/MyUseDll.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MyUseDll.exe - 2 error(s), 0 warning(s)

那要提示这个
zaodt 2009-09-22
  • 打赏
  • 举报
回复
函数调用前需要声明一下:

int Max(int a, int b);

15,471

社区成员

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

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