我注册了a.dll,在我的工程中 b.h 包含了#pragma comment(lib, "a.lib"),也包含了#include"a.h"进去,a.h中有个初始化函数:
extern "C" BOOL
Initialize(UINT h);
我直接在b类的OnInitDialog()中直接写上Initialize(1);想试着初始化这个lib文件,结果提示"应用程序正常初始化失败",我以前从没使用过lib文件,不知道怎么处理,是不是也要先定义一个a.h类的对象,再调用Initialize(UINT h),求高手指点,越详细越好,在线等

解决方案 »

  1.   

    是不是也要先定义一个a.h类的对象,再调用Initialize(UINT h),
    =========
    应该不用吧,看Initialize的定义就是一个普通的导出函数,这样用应该没有问题,但是,它是不是这样调用的呢:Initialize(1)
      

  2.   

    那是怎么调用的?
    我只能看到extern "C" BOOL
    Initialize(UINT h);这样一个函数原型,我怎么让它初始化
      

  3.   

    一般运行时出现“应用程序正常初始化失败"都是加载DLL时找不到DLL造成的,你的DLL是放在EXE同一个文件夹下吗
      

  4.   

    我是放在生成debug的exe的文件夹中,其他地方也都复制放了一份,
      

  5.   

    我想是 BOOL Initialize(UINT h) 函数的声明不对,在动态链接库中要声明为__delspec(exportdll) BOOL Initialize(UINT h) 。在调用它时要声明为__delspec(importdll) BOOL Initialize(UINT h)。解决的办法是用一个宏定义。
    如:
    #ifndef AAA
    #define BBB __delspec(importdll) 
    #else
    #define BBB __delspec(exportdll) 
    #endif
    要把AAA的宏定义要放在生成动态链接库的工程中,这样就会编译#define BBB __delspec(exportdll)。用它的时候不用加宏定义,就会编译第一句。 
      

  6.   

    我想是 BOOL Initialize(UINT h) 函数的声明不对,在动态链接库中要声明为__delspec(exportdll) BOOL Initialize(UINT h) 
    =============
    不是的,如果是声明的问题,那么链接就过不去,但是楼主报的是运行错。
      

  7.   

    extern "C" BOOL
    Initialize(UINT h);有什么代码可以直接取代它吗?我直接在b类的的OnInitDialog()中直接写上Initialize(1);,直接在b类上写a.h中的其他函数,比如a.h中有个BOOL IsSupport();函数,我在b类可以直接写int a = IsSupport();这样来调用它吧?求高手指点
      

  8.   

    我估计还是DLL没有找到,你用LoadLibrary加载试试
      

  9.   

    你用VC6.0带的工具Depends,查看一下你的DLL文件依赖的系统动态库文件是否正确
      

  10.   

    动态库程序应该在Release版本下,以"在静态库中使用MFC”来编译
      

  11.   

    貌似你的调用过程没有错,检查一下你那个动态库或者你的exe里是否发生内存越界访问的错误吧!
      

  12.   

    DLL加载错误,应该是DLL的问题,放置没有问题