我创建了一个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这个函数没定义啊?错在什么地方了?
{
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这个函数没定义啊?错在什么地方了?
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)那要提示这个
{
int i;
i = Max(1,2);
} 同时配置lib文件的路径。
#pragma comment(lib, "MyDll.lib")
extern "C" _declspec(dllexport) int Min(int a, int b);
将extern "C" 去掉,你这样写,名字就会被改编成Max和Min了。而你主工程的名字还是(?Max@@YAHHH@Z) 所以找不到啊。
另外还有一种通过LoadLibrary加载Max函数也可以。
如果是隐式调用的话,你只需在Project->dependency中设置两个工程的关联就行了。
extern "C" _declspec(dllimport) int Max(int a, int b);
extern "C" _declspec(dllimport) int Min(int a, int b);
在测试工程中加入一个上面的头文件,
再在测试文件的.cpp中包含此文件就可以 了!
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")
上面的步骤是隐式链接,你也可以选择显示链接,具体方法就不说了