Datei aus DLL bekommen, nur wie?



  • Hallo Leute

    Ich habe da ein großes Problem in sachen DLL und dateien laden.
    Ich habe jetzt eine Datei (Kopierschutzmechanismen.ldat) in eine DLL gepackt.
    Nun habe ich ein Programm geschrieben mit zwei ComboBoxen.
    Die erste ComboBox soll nach starten der Anwendung 34 einträge auslesen.
    Die zweite soll dan aber nur 13 auslesen.
    Meine Frage dazu lautet:Wie kann Ich diese Liste aus einer DLL laden und dann ihre Werte an die entsprechenden ComboBoxen weitergeben.

    Sprich: ComboBox 1 soll [Daten CD] alle 34 Werte bekommen und ComboBox 2 soll dann [Audio CD] alle Werte bekommen.

    [Kopierbare Kopierschutzmechanismen]

    [Daten CD]
    01=Alkatech
    02=Burut 3P Lock
    03=CD-Cops v1-v3
    04=CD-Protector
    05=CD Check
    06=CopyKiller
    07=CopyLok
    08=CrypKey
    09=DBB
    10=DiskGuard
    11=DummyFiles
    12=Easy Lock
    13=FADE
    14=Free Lock
    15=Illegal TOC
    16=LaserLok
    17=LaserLok Star
    18=Lock Blocks
    19=PhenoProtect
    20=PhenoProtect 2
    21=Plain Old Data
    22=ProtectCD-VOB
    23=Protector
    24=RaeuberKS
    25=Ring Protech
    26=Roxxe
    27=SafeDisc v1-v2
    28=SafeDisc v3-v4.0
    29=SecuRom/New
    30=SecuRom New bis 4.77.00.0028
    31=SYSIPHUS
    32=TZ
    33=WinLock
    34=WTM CD Protect

    [Audio CD]
    01=Cactus Data Shield v100-v300
    02=CCD Lock
    03=CD-Extra
    04=CloneAudioProtector
    05=CoffeeShop 4
    06=CopyX
    07=Duolizer
    08=Karaoke
    09=Key2Audio
    10=MediaCloq v1-v2
    11=MusicGuard
    12=Multimedia Audio CD
    13=SafeAudio

    [Beschädigte Daten/CD`s]
    01=Damaged Audio
    02=Defekte Sektoren
    03=Überlänge
    04=VCD/SVCD mit Defekten Sektoren
    05=Zerkratzte CD

    [Andere Arten]
    01=PSXLybCrypt
    02=VCD SVCD

    Ich würde mich über eine Detaierte Antwort sehr freuen. Wenn es geht sogar ein bsp oder code.

    mfg pcfreak17



  • pcfreak17 schrieb:

    Ich würde mich über eine Detaierte Antwort sehr freuen. Wenn es geht sogar ein bsp oder code.

    oh, sehr nett 🙄
    bevor du keine antwort kriegst: Schau dir die WinAPI-Funktionen FindResource, LoadResource, LockResource etc an in der MSDN.



  • Hallo Black Shadow

    Sorry, aber irgentwie glaube ich, dass ich zu dumm bin.
    Ich raf das einfach nicht.
    Kennst du kein Code bsp?
    Du musst wissen, dass ich aus geschriebenen Code am besten lerne.

    Außerdem ist das schon das zweite Forum wo ich nachfrage.
    Bei www.winapi.net/forum möchte irgentwie keiner Antworten.

    Also bitte ich euch auf Knien, helft mir 😞 😞 😞 😞 😞

    mfg pcfreak17



  • Im Forum von winapi.net gibt es bereits ein Beispiel dazu.



  • // Extrahiere die neue Datei aus den Resourcen:
      HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_BIN1), _T("BIN"));
      if (hRes == NULL)
        return 1;  // error
    
      HGLOBAL hResLoaded = LoadResource(NULL, hRes);
      if (hResLoaded == NULL)
        return 1;  // error
    
      DWORD dwResSize = SizeofResource(NULL, hRes);
      if (dwResSize == 0)
        return 1;  // error
    
      LPVOID pData = LockResource(hResLoaded);
      if (pData == NULL)
        return 1;  // error
    
      HANDLE hTemp = CreateFile(szNewFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
      if (hTemp == INVALID_HANDLE_VALUE)
        return 1;  // error
    
      DWORD dwBytesWritten;
      if (WriteFile(hTemp, pData, dwResSize, &dwBytesWritten, NULL) == FALSE)
      {
        CloseHandle(hTemp);
        UnlockResource(hResLoaded);
        DeleteFile(szNewFile);
        return 1;  // error
      }
      CloseHandle(hTemp);
      UnlockResource(hResLoaded);
    


  • Danke für eure Beiträge

    Aber wenn ich das ganze Kompiliere, kommen bei mir 18 Fehler raus
    hier der Code

    #include <windows.h>
    #include "resource.h"
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
       static TCHAR szAppName[] = TEXT ("Klassenname");
       HWND         hwnd;
       MSG          msg;
       WNDCLASSEX   wndclassex = {0};
    
       wndclassex.cbSize        = sizeof(WNDCLASSEX);
       wndclassex.style         = CS_HREDRAW | CS_VREDRAW;
       wndclassex.lpfnWndProc   = WndProc;
       wndclassex.cbClsExtra    = 0;
       wndclassex.cbWndExtra    = 0;
       wndclassex.hInstance     = hInstance;
       wndclassex.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
       wndclassex.hCursor       = LoadCursor (NULL, IDC_ARROW);
       wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
       wndclassex.lpszMenuName  = NULL;
       wndclassex.lpszClassName = szAppName;
       wndclassex.hIconSm       = wndclassex.hIcon;
    
       if (!RegisterClassEx (&wndclassex))
       {
          MessageBox (NULL, TEXT ("RegisterClassEx fehlgeschlagen!"),
                      szAppName, MB_ICONERROR);
          return 0;
       }
    
       hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil
                      szAppName, // Name der Fensterklasse
                      TEXT ("Fenstertitel"), // Fenstertitel
                      WS_OVERLAPPEDWINDOW, // Fensterstil
                      CW_USEDEFAULT, // X-Position des Fensters                      
                      CW_USEDEFAULT, // Y-Position des Fensters       
                      CW_USEDEFAULT, // Fensterbreite                 
                      CW_USEDEFAULT, // Fensterhöhe                
                      NULL, // übergeordnetes Fenster
                      NULL, // Menü           
                      hInstance, // Programm-Kopiezähler (Programm-ID)            
                      NULL); // zusätzliche Parameter
    
       ShowWindow (hwnd, iCmdShow);
       UpdateWindow (hwnd);
    
       while (GetMessage (&msg, NULL, 0, 0))
       {
          TranslateMessage (&msg);
          DispatchMessage (&msg);
       }
       return msg.wParam;
    }
    
    HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_CLONECD1), _T("CloneCD")); 
      if (hRes == NULL) 
        return 1;  // error 
    
      HGLOBAL hResLoaded = LoadResource(NULL, hRes); 
      if (hResLoaded == NULL) 
        return 1;  // error 
    
      DWORD dwResSize = SizeofResource(NULL, hRes); 
      if (dwResSize == 0) 
        return 1;  // error 
    
      LPVOID pData = LockResource(hResLoaded); 
      if (pData == NULL) 
        return 1;  // error 
    
      HANDLE hTemp = CreateFile(szNewFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); 
      if (hTemp == INVALID_HANDLE_VALUE) 
        return 1;  // error 
    
      DWORD dwBytesWritten; 
      if (WriteFile(hTemp, pData, dwResSize, &dwBytesWritten, NULL) == FALSE) 
      { 
        CloseHandle(hTemp); 
        UnlockResource(hResLoaded); 
        DeleteFile(szNewFile); 
        return 1;  // error 
      } 
      CloseHandle(hTemp); 
      UnlockResource(hResLoaded);
    

    Und hier die Fehlermeldungen

    Kompilierung läuft...
    main.cpp
    E:\Project Ablage\test\main.cpp(58) : error C2065: '_T' : nichtdeklarierter Bezeichner
    E:\Project Ablage\test\main.cpp(59) : error C2143: Syntaxfehler : Fehlendes ';' vor 'if'
    E:\Project Ablage\test\main.cpp(63) : error C2143: Syntaxfehler : Fehlendes ';' vor 'if'
    E:\Project Ablage\test\main.cpp(67) : error C2143: Syntaxfehler : Fehlendes ';' vor 'if'
    E:\Project Ablage\test\main.cpp(71) : error C2143: Syntaxfehler : Fehlendes ';' vor 'if'
    E:\Project Ablage\test\main.cpp(74) : error C2065: 'szNewFile' : nichtdeklarierter Bezeichner
    E:\Project Ablage\test\main.cpp(75) : error C2143: Syntaxfehler : Fehlendes ';' vor 'if'
    E:\Project Ablage\test\main.cpp(79) : error C2143: Syntaxfehler : Fehlendes ';' vor 'if'
    E:\Project Ablage\test\main.cpp(80) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
    E:\Project Ablage\test\main.cpp(80) : error C2447: Funktionskopf fehlt - Parameterliste im alten Stil?
    E:\Project Ablage\test\main.cpp(86) : error C2501: 'CloseHandle' : Fehlende Speicherklasse oder Typbezeichner
    E:\Project Ablage\test\main.cpp(86) : error C2373: 'CloseHandle' : Neudefinition; unterschiedliche Modifizierer
            e:\programme\anwendungen\vc98\include\winbase.h(2507) : Siehe Deklaration von 'CloseHandle'
    E:\Project Ablage\test\main.cpp(86) : error C2440: 'initializing' : 'void *' kann nicht in 'int' konvertiert werden
            Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    E:\Project Ablage\test\main.cpp(87) : error C2143: Syntaxfehler : Fehlendes ')' vor ','
    E:\Project Ablage\test\main.cpp(87) : error C2501: 'hResLoaded' : Fehlende Speicherklasse oder Typbezeichner
    E:\Project Ablage\test\main.cpp(87) : error C2040: 'hResLoaded' : 'int' unterscheidet sich von 'void *' in bezug auf die Anzahl vorgenommener Dereferenzierungen
    E:\Project Ablage\test\main.cpp(87) : error C2059: Syntaxfehler : 'constant'
    E:\Project Ablage\test\main.cpp(87) : error C2059: Syntaxfehler : ')'
    Fehler beim Ausführen von cl.exe.
    
    test.exe - 18 Fehler, 0 Warnung(en)
    

    Was zum Teufel mach ich jetzt schon wieder falsch.
    Ich krig noch die Kriese 😡 😡 😡 😡



  • ähm ich kenne mich da nicht so aus..
    aber sollte der ganze code mit der ganzen if-abfragen nicht in einer funktion stehen?
    lasse mich gerne berichtigen falls ich mich irre 🙂

    mfg
    BigNeal



  • Hallo BigNeal

    Ja du hast Recht,sorry.
    Habe das jetzt so gemacht

    #include <windows.h>
    #include "resource.h"
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
       static TCHAR szAppName[] = TEXT ("Klassenname");
       HWND         hwnd;
       MSG          msg;
       WNDCLASSEX   wndclassex = {0};
    
       wndclassex.cbSize        = sizeof(WNDCLASSEX);
       wndclassex.style         = CS_HREDRAW | CS_VREDRAW;
       wndclassex.lpfnWndProc   = WndProc;
       wndclassex.cbClsExtra    = 0;
       wndclassex.cbWndExtra    = 0;
       wndclassex.hInstance     = hInstance;
       wndclassex.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
       wndclassex.hCursor       = LoadCursor (NULL, IDC_ARROW);
       wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
       wndclassex.lpszMenuName  = NULL;
       wndclassex.lpszClassName = szAppName;
       wndclassex.hIconSm       = wndclassex.hIcon;
    
       if (!RegisterClassEx (&wndclassex))
       {
          MessageBox (NULL, TEXT ("RegisterClassEx fehlgeschlagen!"),
                      szAppName, MB_ICONERROR);
          return 0;
       }
    
       hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil
                      szAppName, // Name der Fensterklasse
                      TEXT ("Fenstertitel"), // Fenstertitel
                      WS_OVERLAPPEDWINDOW, // Fensterstil
                      CW_USEDEFAULT, // X-Position des Fensters                      
                      CW_USEDEFAULT, // Y-Position des Fensters       
                      CW_USEDEFAULT, // Fensterbreite                 
                      CW_USEDEFAULT, // Fensterhöhe                
                      NULL, // übergeordnetes Fenster
                      NULL, // Menü           
                      hInstance, // Programm-Kopiezähler (Programm-ID)            
                      NULL); // zusätzliche Parameter
    
       ShowWindow (hwnd, iCmdShow);
       UpdateWindow (hwnd);
    
       while (GetMessage (&msg, NULL, 0, 0))
       {
          TranslateMessage (&msg);
          DispatchMessage (&msg);
       }
       return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
      // Extrahiere die neue Datei aus den Resourcen: 
      HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_CLONECD1),("CloneCD")); 
      if (hRes == NULL) 
        return 1;  // error 
    
      HGLOBAL hResLoaded = LoadResource(NULL, hRes); 
      if (hResLoaded == NULL) 
        return 1;  // error 
    
      DWORD dwResSize = SizeofResource(NULL, hRes); 
      if (dwResSize == 0) 
        return 1;  // error 
    
      LPVOID pData = LockResource(hResLoaded); 
      if (pData == NULL) 
        return 1;  // error 
    
      HANDLE hTemp = CreateFile(szNewFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); 
      if (hTemp == INVALID_HANDLE_VALUE) 
        return 1;  // error 
    
      DWORD dwBytesWritten; 
      if (WriteFile(hTemp, pData, dwResSize, &dwBytesWritten, NULL) == FALSE) 
      { 
        CloseHandle(hTemp); 
        UnlockResource(hResLoaded); 
        DeleteFile(szNewFile); 
        return 1;  // error 
      } 
      CloseHandle(hTemp); 
      UnlockResource(hResLoaded); 
    }
    

    Aber es gibt immernoch eine Fehlermeldung

    E:\Project Ablage\test\main.cpp(77) : error C2065: 'szNewFile' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.
    


  • Ist das dein Ernst? Wir sind hier kein Kindergartenverein, bitte lern erstal die Grundlagen der C Programmierung bevor du sowas versuchst.



  • Frickler



  • Ja ihr habt ja Recht.
    Ich sollte wirklich erstmal lernen was Funktonen, Methoden usw. sind
    Könnt ihr mir ein gutes Buch für Anfänger empfehlen



  • pcfreak17 schrieb:

    Was zum Teufel mach ich jetzt schon wieder falsch.
    Ich krig noch die Kriese 😡 😡 😡 😡

    Wie gut, das man Dir ein doch ausfhrliches Beispiel gepostet hat...

    Bye, TGGC (Das Jahr des Helden)



  • pcfreak17 schrieb:

    Ja ihr habt ja Recht.
    Ich sollte wirklich erstmal lernen was Funktonen, Methoden usw. sind
    Könnt ihr mir ein gutes Buch für Anfänger empfehlen

    in der bücherecke von c-plusplus.net gibts einige empfehlungen, auch online-zeug. ansonsten wurde diese frage schon häufig gestellt (nicht nur in diesem forum), also einfach mal suchen


Anmelden zum Antworten