loadlibrary
GetProcAddress
FreeLibrary怎么 动态调用cabinet.dll呢,最好有例子?cabinet里我要用到FCI包括5个API。
FCICreate 创建 FCI context
FCIAddFile 向 cabinet 中添加文件
FCIFlushCabinet 结束当前的 cabinet
FCIFlushFolder 结束当前的folder 并建立新的 folder
FCIDestroy 销毁 FCI context
FDI包括4个API。
FDICreate 创建 FDI context
FDIIsCabinet 判断是否为CAB压缩文件,是则返回其属性
FDICopy 解压
FDIDestroy 销毁 FDI context我改怎么处理呢谢谢各位大侠

解决方案 »

  1.   

    没有任何说明么?1 使用 ollydbg for dll推测函数参数个数2 使用 ollydbg dasm 推测参数用途
      

  2.   

    to mydo:谢谢你,cabinet.dll这个文件2000系统以上自带了。主要提供了,压缩和解压缩的API。我现在想动态调用cabinet.all,因为这样写出的压缩解压缩程序会小些。loadlibrary后,GetProcAddress该怎么做?是不是要GetProcAddress每个API?谢谢大侠不耐其烦的指教。
      

  3.   

    是。GetProcAddress 要取得任何要使用到的api,在汇编中我一般用如下方式定义
    GetProcAddress 取得的api:;eg. MessageBoxA_MessageBoxA   typedef proto dword;dword;dword;dword
    lpMessageBoxA  typedef ptr _MessageBoxAMessageBoxA    lpMessageBoxA        ?
      

  4.   

    http://www.codeproject.com/cs/files/CABCompressExtract.asp
      

  5.   

    嘿嘿,正好我有 .lib & .h 文件,不需要那个讨厌的 DLL 文件.如果需要的话,回个话.
      

  6.   

    to  jinandb2()谢谢你我的意思是利用windows自带的cabinet.dll写一个压缩程序不用类 只用那九个接口函数不用类我该怎么写?开始对自己失望了
      

  7.   

    你是不是误会我的意思了,我是说,你有了 .lib 和 .h 文件, 不必要 .DLL 库,即可写好一个压缩程序.压缩功能已经进入 .exe 文件中,非常完美. 即使你发布你的程序,也不必要带上 .dll ,.
      

  8.   

    HINSTANCE hDllInst = ::LoadLibrary("Stic.dll"); 
    if(hDllInst!=NULL) 
    {             
    HOOKPROC pHookFunction = (HOOKPROC)::GetProcAddress(hDllInst,"HookFunction");     
    if(pHookFunction!=NULL)     
    {             
    hhkKey = ::SetWindowsHookEx(WH_CBT, pHookFunction, hDllInst, 0);
    }    
    ::FreeLibrary(hDllInst); 
    }
    else
    AfxMessageBox("LoadLibrary error!");
    这个是一个直接调用dll中函数HookFunction的例子,可以参考一下.
      

  9.   

    没有类,很简单.如果要的话,留个 e_mail .
      

  10.   

    这样就行了,只要把下面该换的,换成你的就行了.
    HINSTANCE hInst;  //句柄
    hInst=LoadLibrary("cabinet.dll");  //加载你提供的DLL
    typedef int (/*_stdcall*/ *ADDPROC)(int a,int b); //定义一个指针,后跟参数,我这是  
                                                      // 瞎写的,你到时用什么,就写什么.
    //ADDPROC Add=(ADDPROC)GetProcAddress(hInst,"这里写上你要导出的函数名");
                                                    //这是直接用法.
    ADDPROC Add=(ADDPROC)GetProcAddress(hInst,MAKEINTRESOURCE(1));//这个数字"1"是函数在 
                                                                   //DLL的序号,
                                                       //这是间接用法.//调用:Add(1,2);//把相应的参数传进去就行了.这里没有用反回值,所以没判断.FreeLibrary(hInst);//这个是卸载DLL
      

  11.   

    to jinandb2() 谢谢你[email protected]
      

  12.   

    感谢各位,我已经解决了只用到系统自带的cabinet.dll。很感谢各位的帮助,谢谢。