我设计了一个MY.DLL,此DLL调用了一个第三方的OTHER.DLL.我不想发布自己的DLL时显示地附带第三方的DLL,因此我将OHTER.DLL以资源的方式包含在MY.DLL,但是现在的问题是,怎么样调用OTHER.DLL呢?

解决方案 »

  1.   

    好像不行呢
    将Other.dll从资源文件中写成一个临时文件,然后LoadLibrary?
      

  2.   

    不错的想法!实现了共享一下!要是实在不行就找dll对应的.lib和 .h吧
      

  3.   

    将文件作为自定义二进制资源加入到,通过用FindResource等函数得到资源的内存地址和大小,然后用fopen/fwrite等函数将资源写成临时文件,参考下面的部分代码:
    Res2File( MAKEINTRESOURCE(ID_RES_DATA), "RES_DATA", "C:\\ResData.dat" ) BOOL Res2File( LPCTSTR lpName, LPCTSTR lpType, LPCTSTR filename ) 

    HRSRC hRes = ::FindResource( NULL, lpName, lpType ); 
    HGLOBAL gl =::LoadResource( NULL, hRes ); 
    LPVOID lp = ::LockResource( gl ); 
    HANDLE fp = ::CreateFile( filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL ); 
    if( fp == INVALID_HANDLE_VALUE ) 
    return FALSE; DWORD a; 
    if( !::WriteFile( fp, lp, SizeofResource( NULL, hRes ), &a, NULL ) ) 
    return FALSE; CloseHandle( fp ); 
    FreeResource( gl ); 
    return TRUE; 
    }
      

  4.   

    支持樓上,不過在動態庫A中調用動態庫B,要注意主程度與動態庫是兩個不同的進程地址空間,也就是說FindResource函數的第一個參數不能為NULL,必須以動態庫的HMODULE為參數,否則FindResource是從主程序中找資源,會返回失敗.
      

  5.   

    我用各位提供的方法已经做好了,效果不错的!
    再有,怎样用静态连接的方式包含第三方的DLL呢?
    要是第三方不提供静态方式的DLL,估计是做不到的。