m_hTest=AfxLoadLibrary("C:\\test\\test.dll");
if(m_hLang==NULL)
      AfxMessageBox("NULL");
一切正常。
但是程序和另一个LIB连接的话,AfxLoadLibrary就返回NULL了,这是为何?其中test.dll是资源DLL,已设置\NOENTRY Project Option。请注意如果我不去连接另一个LIB就没问题:(

解决方案 »

  1.   

    不会吧
    m_hTest与m_hLang什么关系?
      

  2.   

    算我倒霉。m_hTest就是m_hLang.
    test.dll是纯资源的DLL,没有DLLMAIN。
    因为程序静态link了另一个LIB,执行这句m_hTest=AfxLoadLibrary("C:\\test\\test.dll");后m_hTest就==NULL,如果不静态连接那个LIB,就没问题。
      

  3.   

    1。跟到AfxLoadLibrary()看什么地方出错
    2。GetLastError(),看返回什么错
    3。用::LoadLibrary()看是否行
      

  4.   

    GetLastError()说什么??
    test.dll可能调用了其它DLL, 而你又没有提供.
      

  5.   

    进到AfxLoadLibrary里当然是LoadLibrary返回NULL。奇怪的是只要我这个Project连接另一个LIB,这个AfxLoadLibrary(这个LIB)就会返回NULL。
    另一个LIB是在stdafx.h中连接的:
    //stdafx.h
    ....
    #pragma comment(lib, "another.lib")
      

  6.   

    和我遇到的情况差不多. 当时我的A.dll静态调用了另一个B.dll. 我在TESTdll.exe中AfxLoadLibrary("a.dll")总是返回NULL, 害我反复调整A.dll的存放路径,也没有解决.后来突然想到A.dll会在加载的时候找B.dll.所以AfxLoadLibrary(A.dll)失败. 把TESTDll.exe, A.dll, B.dll放在一起问题解决.
      

  7.   

    不是吧。我写的是绝对路径,而且不Link另一个Lib就没有问题。
      

  8.   

    对阿.TESTDll.exe能找到A.dll(绝对路径嘛).可是A.dll如果要调用B.dll又找不到的话,也会使TESTdll.exe Load A.dll 失败.
      

  9.   

    >可是A.dll如果要调用B.dll又找不到的话有道理<g>,哪如何手动为A.dll指定B.dll的路径呢?
    比如
    C:\App Path\program.exe
    C:\App Path\A.dll
    C:\App Path\Dll Path\B.Dll好像LoadLibrary有什么参数,不加.dll扩展名,直接改注册表%System什么的。
      

  10.   

    没办法的,A.dll首先在当前路径找,然后是WINDOWS,然后是WINDOWS\SYSTEM32
    你只有把他们放在当前路径下.或者统统丢到SYSTEM32下.这样肯定能找到.
      

  11.   

    不对呀,很多程序Dll文件都不是放在这些目录下的,他们多是放在程序目录下的一个子目录中.
      

  12.   

    如果是动态调用放那都可以只要load的时候指明完整路径就行。
    如果是静态的话,到那找dll只有windows说了算了。