现在我有a.dll和a.h,a.dll对应a.h,即a.h文件内,有a.dll中函数的声明 。
这两个文件可以完成一定的功能。现在,我还想要a.dll中的功能,但我想把a.dll的文件名,由a.dll改成b.dll,
请问能否实现?如何实现。注:我没有a.dll的源代码,有的只有这个.dll和对应的头文件!谢谢~~

解决方案 »

  1.   

    如果是通过LoadLibrary来载入的,怎么改都无所谓
      

  2.   

    你只有.dll和.h, 看来只能用LoadLibrary来使用这个dll了吧
      

  3.   

    你只有.dll和.h, 看来只能用LoadLibrary来使用这个dll了吧有可能是com,那得重新注册
      

  4.   

    不是com,就是一个普通的dll,不需要注册的那种。谢谢以上各位。如果是用loadlibrary的形式,就没有必要用.h了吧?
      

  5.   

    我刚才试了,好象动态的不行啊。GetProcAddress()的时候,返回的是NULL,可是用.h+.dll的形式,就能直接调用成功,这是怎么回事呢?
      

  6.   

    to  Mackz(在相互) :怎么改呢?是不是象其它仁兄那样说的那样呢。
      

  7.   

    .h+.dll的形式?没有.lib文件也行?
    你把动态调用那段代码帖出来看看呢。肯定有什么地方没弄对。
      

  8.   

    我现在也搞不太清楚到底是不是需要.lib了。
    应该是需要.lib吧?那要是需要.lib,就更不能改名了吧?我觉得pomelowu说的还是有道理。
      

  9.   

    GetProcAddress()后GetLastError看看错误码,别说你这种改发了,我以前做的木马,dll的名称是动态生成的比如dat.tmp之类,没什么问题
      

  10.   

    LoadLibrary就肯定不需要lib文件了 你得到空地址大概是调用协议不同导致导出表中名字不同吧
      

  11.   

    使用LoadLibrary,GetProcAddress()的方式就无所谓!
    你可能是使用mfc方式的dll!所以要依赖头文件!
      

  12.   

    只有.h和.dll
    用LoadLibrary使用dll中的函数,
    头文件.h只是为了得到函数的原型,以便能够正确调用函数.
    你还是得typedef一个函数指针.比如:
    //.h文件就是为了得到函数得原型,工程中是不需要包含它的
    typedef int (__stdcall *MyMessageBox)(HWND hWnd,
        LPCTSTR lpText,
        LPCTSTR lpCaption,
        UINT uType
    );
    HMODULE hmod = LoadLibrary("user32.dll");
    if(hmod)
    {
       MyMessageBox func = (MyMessageBox)GetProcAddress(hmod, _T(MessageBoxA));
       func(0,"text","title",0);
       FreeLibrary(hmod);
    }
      

  13.   

    MyMessageBox func = (MyMessageBox)GetProcAddress(hmod, _T("MessageBoxA"));
      

  14.   

    如果采用的静态连接的方式,由于lib文件中有对应的dll文件名称的说明,所以如果修改了dll的名称,那么会造成运行的时候找不到这个动态库,从而你的程序将不能被启动,通过depends察看你的exe程序,会发现缺少某个dll,而这个dll就是改名之前的名称