最近用 MFC向导创建了一个MFC共享DLL,使用DEF文件导出函数,函数可以正常被显式调用,却不能隐式调用,在隐式调用链接时显视error LNK2019
于是我在调用函数的头文件中尝试使用_declsped(dllimport)、WINAPI以及其它关键字,但是都不能成功编译链接,请教高手这里为什么,及解决方法

解决方案 »

  1.   

    你包含相应的.lib文件了吗?
    隐式调用的时候必须包含相应的.h文件和.lib文件!
    在你的程序中 加入#pragma comment(lib,"xxx.lib")//注意你的.lib文件的路径也可以在VC环境中设置
    tools->option->Directories中设置要包含的头文件和库文件的路径,然后点OK,重新编译一下程序就可以了!希望对你有所帮助!
      

  2.   

    Alt+F7 Link Object/Library Modules编辑框中添加你所需要的DLL的相应.lib文件(要在能找到的路径下)
      

  3.   

    不好意思   上面忘了说明已经添加lib文件了
      

  4.   

    在你的头文件里加上:#pragma comment(lib,".lib")
    确认添加lib时候路径正确吗?
    lib文件应该在环境变量设置的路径下
      

  5.   

    贴一下代码~或者出错信息~
    可能你的lib库位置不对~
      

  6.   

    谢谢大家的帮助,不过应该可以排除是lib的原因,我把示例源码放在了个人主页上
    麻烦大家能不能帮我看看
    http://free.7host02.com/tomqyp/MyProjects.rar
    http://free.7host02.com/tomqyp1/MyProjects.rar
    http://www.websamba.com/tomqyp/MyProjects.rar
    三个地址都是同一个文件  如果下不了就换一个试试
      

  7.   

    bool CMydllApp::test()
    {
    AfxMessageBox("OK");
    return true;
    }=============
    #ifdef __cplusplus
    extern "C" {
    #endif
    //----------------------------------------------------------------------------------
    BOOL WINAPI test();
    //---------------------------------------------------------------------------------
    #ifdef __cplusplus
    }
    #endif===================bool VS BOOL~
      

  8.   

    ////////////////WINDEF.H
    typedef int     BOOL;BOOL is a int~
    bool is a standard c++ type~
      

  9.   

    类的成员函数是不能单独导出的  你非要导出 到处的函数实际会加上一个参数sampl:  Ctest::Test(void)   实际上是 Test(LPVOID pClass)即编译器 在编译过程中在后面加上一个参数 这个参数就是  pClass 就是 调用事该类生成对象的指针建议导出整个类 你可以通过认为在后面加上 LPVOID pClass 参数是可以编译通过的lib库只说明在参数的大小  不说明参数的类型  不过即使编译成功 如果你原来的导出函数有参数运行中一定会出错
      

  10.   

    Sorry  我刚才犯了一个想当然的错误认为加上一个参数是无法编译通过的 似乎在导出的lib中还加入了类的信息导致无法导入 不过他在实际调用还是按上述过程
      

  11.   

    谢谢大家的热心帮助 原来是我忽略了this指针 不过还有两点不太明白
    首先我也觉得HEX484A48(HJH) 是对的
    不过试了试将头文件改成BOOL WINAPI test(LPVOID pClass);并没有通过编译不知道是什么原因。
    其次既然显示链接可以成功调用,而且我在VB测试中也成功调用,这证明成员函数是要以导出的,为什么就不能用隐式调用呢。能不能通过修改lib文件进行调用呢?
    可惜小弟对lib文件格式不了解,还请高手指点一二。