我有个DLL,其中有个函数声明为
  __declspec(dllexport) long WINAPI convert(char*str1 ,char* str2);想调用这个函数,我是这样做的:
    1,typedef long (WINAPI * PGETDIBPROC)(char*,char*);
    2,HINSTANCE hConvertLib = LoadLibrary("Convert.dll");
       PGETDIBPROC lpFun;
    3,lpFun = (PGETDIBPROC)(GetProcAddress(hConvertLib, "Jpg2BMP"));
    4,(*lpFun) (buf1,buf2);其中 char buf1[256];char buf2[256];   程序运行到第3步的时候lpFun的地址是0xcccccccc,可是当运行到第4步的时候lpFun就变成了0x00000000,请各位大哥大姐帮帮忙,谢谢了!
  

解决方案 »

  1.   

    不是调用convert(..)吗?
    怎么:lpFun = (PGETDIBPROC)(GetProcAddress(hConvertLib, "Jpg2BMP"))?
      

  2.   

    到第3步的时候,lpFun根本还没有获得GetProcAddress返回的值,到了第4步,才可能得到GetProcAddress返回的值。程序运行到第3步的时候lpFun的地址是0xcccccccc,//应该是PGETDIBPROC lpFun得到的随机值
    可是当运行到第4步的时候lpFun就变成了0x00000000//GetProcAddress调用失败了。
      

  3.   

    第三步之前为0xccccccc是因为变量没初始化,之后为NULL,表示GetProcAddress失败了。
    失败时的错误代码是多少?
      

  4.   

    First-chance  exception  0xC00000005 Acess Violation
      

  5.   

    lpFun = (PGETDIBPROC)(GetProcAddress(hConvertLib, "Jpg2BMP"));
    ==》
    lpFun = (PGETDIBPROC)(GetProcAddress(hConvertLib, "convert"));函数名字 ...
      

  6.   

    你的导出函数不是 convert 么 ..lpFun = (PGETDIBPROC)(GetProcAddress(hConvertLib, "Jpg2BMP"));
    没有这样的函数,(或者类型不匹配)
    GetProcAddress 函数出错,
    返回NULL,
    就是 0x00000000 ....
      

  7.   

    忙中出错,写帖子的时候写错了
      应该是lpFun = (PGETDIBPROC)(GetProcAddress(hConvertLib, "convert"));
       不好意思~!
      

  8.   

    多谢各位了,最后找到了原因:用DEPENDS.EXE看了一下,导出的函数名是乱码,DLL是有问题的;后来换了一个DLL就好了。