Yardım DLL dosyalarını exe'ye gömmek istiyorum

  • Konuyu açan Konuyu açan xplarges
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 273
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

xplarges

Premium Üye
Premium Üye
Üye
Mesaj
51
Çözümler
1
Beğeni
3
Puan
79
Ticaret Puanı
0
Merhabalar,

Başlıktada belirttiğim gibi, resimdeki klasörde dosya sayısını azaltmak istiyorum. Yardımlarınız için şimdiden teşekkür ederim.

DLL dosyaları hariç onlarda azaltılabiliyorsa, exe'ye gömülebiliyorsa onlar hakkında da görüşlerinize açığım.

İyi forumlar dilerim.

1719449159787.webp
 
Son düzenleme:
Direkt dll leri exe'ye gömen bi program vardı ama ne kadar sağlıklıydı hatırlamıyorum. Dll boyutunu kontrol etmrk için zamanımda bu kod kullanılıyodu, kendi dll lerinize göre uyarlarsınız:

C++:
Genişlet Daralt Kopyala
//@svn/Source/Client/UserInterface/Userinterface.cpp:
int GetSizeOfMyDLL(char* fileName)
{
    HANDLE file = CreateFileA(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    return GetSizeOfMyDLL(file, NULL);
}

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    #define SIZE_DLL 16896
    #define NAME_DLL "bdvid32.dll"
    HINSTANCE hGetProcIDDLL = LoadLibrary(NAME_DLL);

    if (hGetProcIDDLL == NULL)
    {
        MessageBox(NULL, "The client can't start without one dll, please update autopatcher.", "#System Error", MB_ICONSTOP); 
        return 0;
    }
    
    else if (GetSizeOfMyDLL(NAME_DLL) != SIZE_DLL)
    {
        MessageBox(NULL, "DLL has been changed, please update autopatcher.", "#System Error", MB_ICONSTOP);
        return 0;
    }
}
 
DLL dosyalarını %100 sağlıklı bir şekilde projeye gömmek için hepsinin kaynak koduna erişimin olması gerekir. Aksi halde kaynak kodlarından bunu yapamazsın. Bunun haricinde exe klasörünün içine bir klasör oluşturup dll dosyalarını içine atabilirsin. Ama bunun için visual studio üzerinden ayarlar yapman gerekecektir.
 
DLL dosyalarını %100 sağlıklı bir şekilde projeye gömmek için hepsinin kaynak koduna erişimin olması gerekir. Aksi halde kaynak kodlarından bunu yapamazsın. Bunun haricinde exe klasörünün içine bir klasör oluşturup dll dosyalarını içine atabilirsin. Ama bunun için visual studio üzerinden ayarlar yapman gerekecektir.
Nasıl yapılacağını anlatmamışsın ama? Bu arada klasöre oluşturmak istemiyorum. Direk exe'ye gömmek istiyorum.
 
eskiden .eix uzantılı dosyaları exeye gömerlerdi packlar unpacklanmasın diye. biraz araştırırsan bulursun sanırım
 
Öncelikle herkesin verdiği cevaplar için teşekkür ederim. Pack içerisinde olmasını da istemiyorum oranın düzenli olarak kalması daha sağlıklı. Direk exe'nin içine gömmek istiyorum. Konuyla alakalı injectorler var, fakat oyuncular açtığı zaman virüs olarak algılıyor. Direk visual studio içerisinden eklememiz gerekiyor.
 
DLL dosyalarını %100 sağlıklı bir şekilde projeye gömmek için hepsinin kaynak koduna erişimin olması gerekir. Aksi halde kaynak kodlarından bunu yapamazsın. Bunun haricinde exe klasörünün içine bir klasör oluşturup dll dosyalarını içine atabilirsin. Ama bunun için visual studio üzerinden ayarlar yapman gerekecektir.
eix epk nın içine nasıl gömebilirim? veya dediğin gibi klasörün içine anlatabilir misin?
 
Konu üzerinde araştırmalar yaptım biraz chat gpt, biraz diğer forumlar biraz mt2 forumları şöyle bir şey oluşturdum. Her dll dosyasının source koduna ulaşamayabiliriz örnek granny2.dll o durumda şöyle bir durum izlenebilir:

Eğer DLL dosyasını statik kütüphane olarak değil de gömülü kaynak (embedded resource) olarak projenize dahil etmek istiyorsanız, aşağıdaki adımları izleyin:

  1. DLL Dosyasını Kaynak Olarak Dahil Edin:
    • Projenize sağ tıklayın ve "Add" -> "Existing Item..." seçeneği ile DLL dosyasını projeye ekleyin.
    • Eklendikten sonra, Solution Explorer'da DLL dosyasına sağ tıklayın ve "Properties" seçeneğine gidin.
    • "Content" seçeneğini "Yes" olarak ayarlayın ve "Copy to Output Directory" seçeneğini "Copy if newer" olarak ayarlayın.
  2. DLL Dosyasını Yükleyin ve Kullanın:
    • DLL dosyasını uygulama çalışırken geçici bir konuma kopyalayın ve LoadLibrary ile yükleyin.
    • Aşağıdaki örnekte, DLL dosyasını çalıştırılabilir dosyanın yanına kopyalayıp yüklemeyi gösterir:
    • userinterface.cpp/ arat int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow):
      Genişlet Daralt Kopyala
      #include <Windows.h>
      #include <Shlwapi.h>
      #include <fstream>
      
      int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
      {
          char szDllPath[MAX_PATH];
          GetModuleFileNameA(NULL, szDllPath, MAX_PATH);
          PathRemoveFileSpecA(szDllPath);
          strcat(szDllPath, "\\example.dll");
      
          std::ofstream ofs(szDllPath, std::ios::binary);
          ofs.write((const char*)dll_data, sizeof(dll_data));
          ofs.close();
      
          HMODULE hModule = LoadLibraryA(szDllPath);
          if (hModule == NULL) {
              MessageBox(NULL, "DLL yüklenemedi.", "Hata", MB_ICONERROR);
              return 0;
          }
      
          typedef void (*ExampleFunction)();
          ExampleFunction func = (ExampleFunction)GetProcAddress(hModule, "ExampleFunction");
          if (func) {
              func();
          }
      
          // Diğer kodlar...
      
          return 0;
      }
    • Bu yöntemlerden biriyle DLL dosyasını projenize dahil edebilir ve kullanıcılarınıza ekstra DLL dosyası vermeden projenizi dağıtabilirsiniz.
    • lütfen denedikten sonra bilgi verin buraya.
 
Konu üzerinde araştırmalar yaptım biraz chat gpt, biraz diğer forumlar biraz mt2 forumları şöyle bir şey oluşturdum. Her dll dosyasının source koduna ulaşamayabiliriz örnek granny2.dll o durumda şöyle bir durum izlenebilir:

Eğer DLL dosyasını statik kütüphane olarak değil de gömülü kaynak (embedded resource) olarak projenize dahil etmek istiyorsanız, aşağıdaki adımları izleyin:

  1. DLL Dosyasını Kaynak Olarak Dahil Edin:
    • Projenize sağ tıklayın ve "Add" -> "Existing Item..." seçeneği ile DLL dosyasını projeye ekleyin.
    • Eklendikten sonra, Solution Explorer'da DLL dosyasına sağ tıklayın ve "Properties" seçeneğine gidin.
    • "Content" seçeneğini "Yes" olarak ayarlayın ve "Copy to Output Directory" seçeneğini "Copy if newer" olarak ayarlayın.
  2. DLL Dosyasını Yükleyin ve Kullanın:
    • DLL dosyasını uygulama çalışırken geçici bir konuma kopyalayın ve LoadLibrary ile yükleyin.
    • Aşağıdaki örnekte, DLL dosyasını çalıştırılabilir dosyanın yanına kopyalayıp yüklemeyi gösterir:
    • userinterface.cpp/ arat int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow):
      Genişlet Daralt Kopyala
      #include <Windows.h>
      #include <Shlwapi.h>
      #include <fstream>
      
      int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
      {
          char szDllPath[MAX_PATH];
          GetModuleFileNameA(NULL, szDllPath, MAX_PATH);
          PathRemoveFileSpecA(szDllPath);
          strcat(szDllPath, "\\example.dll");
      
          std::ofstream ofs(szDllPath, std::ios::binary);
          ofs.write((const char*)dll_data, sizeof(dll_data));
          ofs.close();
      
          HMODULE hModule = LoadLibraryA(szDllPath);
          if (hModule == NULL) {
              MessageBox(NULL, "DLL yüklenemedi.", "Hata", MB_ICONERROR);
              return 0;
          }
      
          typedef void (*ExampleFunction)();
          ExampleFunction func = (ExampleFunction)GetProcAddress(hModule, "ExampleFunction");
          if (func) {
              func();
          }
      
          // Diğer kodlar...
      
          return 0;
      }
    • Bu yöntemlerden biriyle DLL dosyasını projenize dahil edebilir ve kullanıcılarınıza ekstra DLL dosyası vermeden projenizi dağıtabilirsiniz.
    • lütfen denedikten sonra bilgi verin buraya.
1720093910063.webp

Burada 18 adet proje var mesela granny dll sini hangisine ekleyeceğim direk en üstteki cliente ekleyince eklediğim dll ye sağ tıklayıp özellikler diyince o dediğiniz yer gelmiyor şöyle bir yer geliyor

1720093989618.webp
 
Üst