Datei aus DLL bekommen, nur wie?



  • 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