2012-03-21 88 views
2

外部CLI/C++ DLLを埋め込みリソースまたはそのようなものとしてMFC EXEに埋め込むことはできますか?私のアプリケーションは現在、データベースの接続、DBからの情報の引き出しなどの基本的な機能を備えたDLLのすぐ隣にあります。MFC C++ EXEにDLLを埋め込む?

私はDLL関数を使用するためにLoadLibraryを使用します。それから、私はthemidaでEXEを保護し、EXEとDLLを一緒にパックします。問題は、DLLとEXEをパックすることです。私は非常に強力な機能であるthemidaでファイルのパッチを無効にする必要があります。私はそれを無効にする必要があります。なぜなら私は自分のEXEをパックするときにファイルを少し修正する必要があります。そして、themidaはクラックされていると思って、アプリケーションを動作させません。

このDLLをEXEに埋め込む方法はありますか? DLLは悲しいことにthemidaと互換性がないため、別のファイルです。

答えて

4

1)実行可能プロジェクトにリソーススクリプトファイルを追加します。リソースコンパイラを使用して、RESファイルへ

IDR_DLL_BIN  BINARY MOVEABLE PURE “..\\debug\\myextern.dll” 

2)コンパイルRCファイル:Visual Studioを使用している場合

rc.exe /fo ”Release/mydll.res” “.\mydll.rc” 

、それはRESファイルを構築し、また実行可能でそれをバインドします。

3)見つけて、実行可能ファイルからリソースをロード:私は上記のコードを実行した後にポイントをlpAddressメモリ空間に記述されたソースDLLを入手したら

bool ExtractResource(const HINSTANCE hInstance, WORD resourceID, LPCTSTR szFilename) 
{ 
    bool bSuccess = false; 
    try 
    { 
     // Find and load the resource 
     HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resourceID), _T(“BINARY”)); 
     HGLOBAL hFileResource = LoadResource(hInstance, hResource); 

     // Open and map this to a disk file 
     LPVOID lpFile = LockResource(hFileResource); 
     DWORD dwSize = SizeofResource(hInstance, hResource);    

     // Open the file and filemap 
     HANDLE hFile = CreateFile(szFilename, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
     HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, NULL);    
     LPVOID lpAddress = MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);    

     // Write the file 
     CopyMemory(lpAddress, lpFile, dwSize);    

     // Un-map the file and close the handles 
     UnmapViewOfFile(lpAddress); 
     CloseHandle(hFileMap); 
     CloseHandle(hFile); 
    } 
    catch(…) 
    { 
     // Whatever 
    } 
    return bSuccess; 

} 
+0

、どのメソッドを呼び出すためにlpAddressを使うのですか私は欲しい?私のapp-devヘッドはここでいくつかの援助が必要です。 – rtischer8277

1

Enigma Virtual Boxを試してみることができます。これにより、DLLがEXEにパックされ、LoadLibraryが "うまく動作する"ようになります。もちろん、C++/CLI DLLの場合は、.NET Frameworkがインストールされている必要があります。

関連する問題