各位高手,这个问题是这样的:我用以下代码产生一个动态连接库:
//BurnVcd.h中
#ifndef BURNVCD_H
#define BURNVCD_H
__declspec(dllexport) int BurnVCD(int num_files, CString files[],unsigned long speed);
#endif//BurnVcd.cpp中
#include "BurnVcd.h"
int BurnVCD(int num_files, CString files[],unsigned long speed){
  实现部分...
}导出BurnVcd.h(dllexport部分改为dllimport)、BurnVcd.lib、BurnVcd.dll
把他们放入第二个工程中,代码为:
//All.h中
#include "BurnVcd.h"
#pragma comment(lib, "BurnVcd.lib")//UseBurnVcd.h中
#ifndef USEBURNVCD_H
#define USEBURNVCD_H
__declspec(dllexport) void UseBurnVcd();
#endif//UseBurnVcd.cpp中
#include "All.h"
#include "UseBurnVcd.h"
void UseBurnVcd(){
  BurnVcd(...);//使用上一个DLL提供的那个函数
}
此时导出第二个工程的.h .lib和.dll最后我在第三个工程中测试第二个工程
//Application.cpp中
#include "UseBurnVcd.h"
#pragma comment(lib, "UseBurnVcd.lib")
...
某个函数中
UseBurnVcd()前两个工程的完成都没有问题,第三个工程在运行时出现错误:“无法定位的程序输入点BurnVcd于动态链接库UseBurnVcd.dll上”请问高手错误在哪里,如何修改。

解决方案 »

  1.   

    实现部分也要__declspec(dllexport)
      

  2.   

    应该是dll不允许这种迭代式的使用。
      

  3.   

    AutopVision(阳光):
    我在实现之前都包含了他们的声明文件,应该没有问题。galaxy_fxstar(阿星):
    我以前好像做过dll嵌套的程序,应该没有问题
      

  4.   

    应该是动态链接库的位置有问题!如果是显示Load那么注意位置!
      

  5.   

    vcleaner(我没做大哥已经很久了.......) :
    我把第二个动态链接库生成的.lib .dll和它导出的.h都放到了第三个工程的目录中去了,
    当我把第二个工程UseBurnVcd()中的BurnVcd()调用去掉第三个工程的运行就正常了,看来
    第二个工程生成的dll放的位置应该没有问题。
      

  6.   

    我仍然认为是位置问题。我觉得是它无法判断当前的文件夹位置。如果是隐式调用,那么可能看的还不是很清楚,不调用DLL的函数可能无法感知DLL是否链接成功。最好你使用显式调用LoadLibrary、GetProcAddress、FreeLibrary试试看。看看Load是否成功!
      

  7.   

    vcleaner(我没做大哥已经很久了.......)
    LoadLibrary()之后的hintance为NULL,估计是第一个工程生成的dll就有问题,我考虑您提到
    的路径问题,就把.dll放到D:\下,LoadLibrary("d:\\xx.dll")之后的hintance还是为NULL。
      

  8.   

    使用绝对路径Load DLL试试能否成功!
      

  9.   

    vcleaner(我没做大哥已经很久了.......) 
    原来第一个工程又用了一个动态链接库message.dll,所以形成了3层嵌套,改为显式
    链接就Okay了,谢谢高手!