Nicht definierte referenc (Code::Blocks)



  • Hallo zusammn !
    Ich habe Code zu initialisieren von Open/SaveFile Dialoge:

    #include <windows.h>
    #include <commdlg.h>
    
    void PopFileInitialize (HWND hwnd)
    {
         static TCHAR szFilter[] = TEXT ("Textdateien (*.TXT)\0*.txt\0")  \
                                   TEXT ("ASCII-Dateien (*.ASC)\0*.asc\0") \
                                   TEXT ("Alle Dateien (*.*)\0*.*\0\0") ;
    
         ofn.lStructSize       = sizeof (OPENFILENAME) ;
         ofn.hwndOwner         = hwnd ;
         ofn.hInstance         = NULL ;
         ofn.lpstrFilter       = szFilter ;
         ofn.lpstrCustomFilter = NULL ;
         ofn.nMaxCustFilter    = 0 ;
         ofn.nFilterIndex      = 0 ;
         ofn.lpstrFile         = NULL ;          // Bei Öffnen bzw. Schließen gesetzt
         ofn.nMaxFile          = MAX_PATH ;
         ofn.lpstrFileTitle    = NULL ;          // Bei Öffnen bzw. Schließen gesetzt
         ofn.nMaxFileTitle     = MAX_PATH ;
         ofn.lpstrInitialDir   = NULL ;
         ofn.lpstrTitle        = NULL ;
         ofn.Flags             = 0 ;             // Bei Öffnen bzw. Schließen gesetzt
         ofn.nFileOffset       = 0 ;
         ofn.nFileExtension    = 0 ;
         ofn.lpstrDefExt       = TEXT ("txt") ;
         ofn.lCustData         = 0L ;
         ofn.lpfnHook          = NULL ;
         ofn.lpTemplateName    = NULL ;
    }
    
    BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
    {
    
         ofn.hwndOwner         = hwnd ;
         ofn.lpstrFile         = pstrFileName ;
         ofn.lpstrFileTitle    = pstrTitleName ;
         ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
    
        return GetOpenFileName(&ofn) ;
    
    }
    
    BOOL PopFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
    {
         ofn.hwndOwner         = hwnd ;
         ofn.lpstrFile         = pstrFileName ;
         ofn.lpstrFileTitle    = pstrTitleName ;
         ofn.Flags             = OFN_OVERWRITEPROMPT ;
    
        return GetSaveFileName (&ofn) ;
    }
    
    BOOL PopFileRead (HWND hwndEdit, PTSTR pstrFileName)
    {
         BYTE   bySwap ;
         DWORD  dwBytesRead ;
         HANDLE hFile ;
         int    i, iFileLength, iUniTest ;
         PBYTE  pBuffer, pText, pConv ;
    
         // Datei öffnen
         if (INVALID_HANDLE_VALUE ==
                  (hFile = CreateFile (pstrFileName, GENERIC_READ, FILE_SHARE_READ,
                                       NULL, OPEN_EXISTING, 0, NULL)))
              return FALSE ;
    
         // Dateigröße in Bytes ermitteln, zwei Bytes für ein abschließendes NUL
         // dazuaddieren (Unicode!), Speicher belegen
         iFileLength = GetFileSize (hFile, NULL) ;
         pBuffer =(PBYTE) malloc (iFileLength + 2) ;
    
         // Dateiinhalt lesen und zwei NUL-Zeichen anhängen
         ReadFile (hFile, pBuffer, iFileLength, &dwBytesRead, NULL) ;
         CloseHandle (hFile) ;
         pBuffer[iFileLength] = '\0' ;
         pBuffer[iFileLength + 1] = '\0' ;
    
         // Unicode-Text?
         iUniTest = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE ;
    
         if (IsTextUnicode (pBuffer, iFileLength, &iUniTest))
         {
              pText = pBuffer + 2 ;
              iFileLength -= 2 ;
    
              if (iUniTest & IS_TEXT_UNICODE_REVERSE_SIGNATURE)
              {
                   for (i = 0 ; i < iFileLength / 2 ; i++)
                   {
                        bySwap = ((BYTE *) pText) [2 * i] ;
                        ((BYTE *) pText) [2 * i] = ((BYTE *) pText) [2 * i + 1] ;
                        ((BYTE *) pText) [2 * i + 1] = bySwap ;
                   }
              }
    
              // Speicher für eine eventuell notwendige Konvertierung belegen
              pConv = (PBYTE) malloc (iFileLength + 2) ;
    
              // Wenn das Editfenster nicht mit Unicode zurechtkommt, Konvertierung
    #ifndef UNICODE
              WideCharToMultiByte (CP_ACP, 0, (PWSTR) pText, -1, (LPSTR) pConv,
                                 (int) iFileLength + 2, NULL, NULL) ;
    
              // Wenn das Editfenster mit Unicode zurechtkommt, einfache Kopie
    #else
              lstrcpy ((PTSTR) pConv, (PTSTR) pText) ;
    #endif
    
         }
         else      // ANSI-Text
         {
              pText = pBuffer ;
    
              // Speicher für eine eventuell notwendige Konvertierung belegen
              pConv = (PBYTE) malloc (2 * iFileLength + 2) ;
              // Wenn das Editfenster mit Unicode arbeitet, Konvertierung
    #ifdef UNICODE
              MultiByteToWideChar (CP_ACP, 0, pText, -1, (PTSTR) pConv,
                                   iFileLength + 1) ;
    
              // ANSI-Text, ANSI-Fenster: reine Kopie
    #else
              lstrcpy ((PTSTR) pConv, (PTSTR) pText) ;
    #endif
         }
    
         SetWindowText (hwndEdit, (PTSTR) pConv) ;
         free (pBuffer) ;
         free (pConv) ;
    
         return TRUE ;
    }
    

    Beim kompilieren bekomme in die Zeilen 43 und 55 Fehlermeldung:
    - undefined reference to GetOpenFileName
    - undefined reference to GetSaveFileName

    Struktur Variable "ofn" (OPENFILENAME)global deklariert.
    Kann mir bitte jemand Helfen, wie ich die Fehler beheben kann ?



  • Äh, comdlg32.lib linken?



  • Gegen Comdlg32.lib linken.

    So wie hier.

    static TCHAR szFilter[] = TEXT ("Textdateien (*.TXT)\0*.txt\0")  \
                                   TEXT ("ASCII-Dateien (*.ASC)\0*.asc\0") \
                                   TEXT ("Alle Dateien (*.*)\0*.*\0\0") ;
    

    sieht aber auch falsch aus. Du versuchst 3 strings in einen zu packen, wie das "\" die strings erknüpft weiß ich nicht, aber der Compiler beschwert sich..



  • Wäre Comdlg32.lib nicht gelinkt, dann hätte ich ganz andere Fehlermeldung erhalten.

    EDIT//

    @Hi & DarkShadow44: Danke für die Hilfe ! Tatsächlich comdlg32.lib war nicht gelinkt.
    @DarkShadow44: Ich kenn mich schon mit IDE aus, wo und wie was einstellt, danke für den Link.

    Mist solche einfachere Fehler und ich komme nicht drauf, jetzt läuft wie geschmirt.


Anmelden zum Antworten