有个问题,大家帮我看下,为什么dll调用后,得不到里面的函数啊,是什么问题,错误号是127
HINSTANCE hdll;
PDllENTRY  dllentry; CString path = "D:\\DPC\\exe2dll\\ExtractData\\Debug\\";
CString filename = "ExtractData.dll"; hdll = LoadLibrary(path  + filename);
ASSERT( hdll > (HINSTANCE)HINSTANCE_ERROR );
    dllentry = (PDllENTRY)GetProcAddress(hdll,"LaunchExtractData");
DWORD err = GetLastError();
dllentry(1);
FreeLibrary(hdll);

解决方案 »

  1.   

    CString path = "D:\\DPC\\exe2dll\\ExtractData\\Debug\\";
    CString filename = "ExtractData.dll";
    char ss[256];
         strcpy(ss, path);
          strcat(ss, filename);
          filename = ss;
    hdll = LoadLibrary(filename);
      

  2.   

    你把GetProcAddress返回的数据强制转换为一个函数指针看看,那样应该是没有问题了。问题不在LoadLibrary那里。
      

  3.   

    typedef void(COMP_FUNC)(long lVal);COMP_FUNC* compFunc = (COMP_FUNC*)::GetProcAddress(hDll, "doComp");
      

  4.   

    LoadLibrary后,hdll的值是NULL吗?如果是,那是dll路径没写正确
    GetProcAddress后,dllentry的值是NULL吗?如果是,那么是函数名写错,或该函数没有在dll里导出如果以上都不是,那是在哪一步有问题?
      

  5.   

    不好意思,忘了上面一句,typedef int(*PDllENTRY)(int); ,我是定义的函数指针,还是错,127的代码错是说找不到dll的进程,但hdll 已经有值了啊
      

  6.   

    要看你的LaunchExtractData()是如何导出的.
    1.DEF
    2. __declspec(dllexport)如果你是用第二种方法导出,请用vc6.0带的dependency查看最终导出的函数名,比如_LaunchExtractData@12等.
      

  7.   

    hdll有值,但dllentry是空,dll文件是没问题的,里面也有那个函数,export过了,已经请教了N多高人,都找不出错...
      

  8.   

    是按第二种导出的__declspec(dllexport),而且人家也是用你说的那个dependency看函数命,也是没问题的,神了...
      

  9.   

    用depends工具看下这个函数是否被转出了?
      

  10.   

    typedef int(_cdecl *PDllENTRY)(int);
    PDllENTRY  dllentry;dllentry = (PDllENTRY)GetProcAddress(hdll,"LaunchExtractData");
    DWORD err = GetLastError();
    dllentry(1);
    FreeLibrary(hdll);
      

  11.   

    问题解决了,还是文件名不够"干净",要在.def文件里加过后就ok了,谢谢大家