我创建了一个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这个函数没定义啊?错在什么地方了?

解决方案 »

  1.   

    函数调用前需要声明一下:int Max(int a, int b);
      

  2.   

    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)那要提示这个
      

  3.   

    你是怎么加载DLL到工程中去的呢?
      

  4.   

    #pragma comment(lib, MyDll.lib)
      

  5.   

    这是link错误,不是编译错误啊。你要把库文件加进来
      

  6.   

    又是这个问题,MyDll.lib没有加入编译环境中。。
      

  7.   

    #include "MyDll.h"void CMyUseDllDlg::OnButton1() 
    {
        int i;
        i = Max(1,2);
        
    }    同时配置lib文件的路径。
      

  8.   

    Sorry,忘记加双引号了,在程序中添加如下代码即可:
    #pragma comment(lib, "MyDll.lib")
      

  9.   

    项目-》属性-》链接器-》输入-》附加依赖项-》MyDll.lib。头文件可以不加
      

  10.   

    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函数也可以。
      

  11.   

    mydll.cpp添加头文件mydll.h,然后通过LoadLibrary加载.
      

  12.   

    我也试过了,貌似是应为lib不能连接上,求各位大大指教啊
      

  13.   

    extern “C”的问题啊,extern "C"是为了c里面的函数能够调用c++定义的函数。c++本身存在name mangling。(名字重整).编译器会修改函数名。使用的时候,声明 extern "C" _declspec(dllimport) int Max(int a, int b);
    如果是隐式调用的话,你只需在Project->dependency中设置两个工程的关联就行了。
      

  14.   

    #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中包含此文件就可以 了!
      

  15.   

    这个必须包含DLL文件的头文件,把lib文件也加入LINKER中!
      

  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") 
    上面的步骤是隐式链接,你也可以选择显示链接,具体方法就不说了