error LNK2001: Nichtaufgeloestes externes Symbol _fnmerge



  • Hallo!

    Ich habe folgendes Problem mit einer Fehlermeldung.

    Mein Source code sieht etwa so aus.

    #include <windows.h>
    #include <stdio.h>
    #include <dir.h>
    #include <dos.h>
    #include <math.h>
    #include <string.h>

    ...
    ...
    ...

    static char szDrive[MAXDRIVE], szDir[MAXDIR], szName[MAXFILE], szExt[MAXEXT] ;

    ...
    ...
    ...

    fnsplit(ofn.lpstrFile, szDrive, szDir, szName, szExt) ;

    ...
    ...
    ...

    fnmerge (ofn.lpstrFile, szDrive, szDir, szName, szExt) ;
    fnmerge (ofn.lpstrFileTitle, NULL, NULL, szName, szExt) ;

    Was folgenden Fehler erzeugt:

    ace.obj : error LNK2001: Nichtaufgeloestes externes Symbol _fnmerge
    ace.obj : error LNK2001: Nichtaufgeloestes externes Symbol _fnsplit
    Debug/aceorg2.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Ich muß dazu sagen, das der Source Code in BCB5 erstellt wurde und ich jetzt versuche das Programm unter MS Visual c++ 6 zum laufen zu bringen.

    Wo liegt der Fehler?



  • ich vermute, der borland benutzte das fnsplit aus der dir.h

    wie du siehst, ist es nicht portable, kein standard.

    für das studio musst du dann gleichwertiges suchen...richtung msdn und winapi schaun.

    #include <dir.h>
    
    int fnsplit (const char *path, char *drive, char *dir, 
    		char *name, char *ext);
    
    Description 
    This function decomposes a path into its components. It is smart enough to 
    know that . and .. are directories, and that file names with a leading dot, like `.emacs', are not all extensions. 
    
    The drive, dir, name and ext arguments should all be passed, but some or even 
    all of them might be NULL pointers. Those of them which are non-NULL should 
    point to buffers which have enough room for the strings they would hold. The constants MAXDRIVE, MAXDIR, MAXFILE and MAXEXT, defined on dir.h, define the maximum length of these buffers. 
    
    See section fnmerge. 
    
    Return Value 
    A flag that indicates which components were found: 
    
    DRIVE 
    The drive letter was found. 
    
    DIRECTORY 
    A directory or subdirectories was found. 
    
    FILENAME 
    A filename was found. 
    
    EXTENSION 
    An extension was found. 
    
    WILDCARDS 
    The path included * or ?. 
    
    Portability 
    ANSI/ISO C No  
    POSIX No
    


  • Hast du in etwa eine Idee was da gleichwertig sein könnte?

    Ich habe da bist jetzt noch nichts gefunden?



  • hier ein beispiel, wie sie funktioniert:

    char d[MAXDRIVE], p[MAXDIR], f[MAXFILE], e[MAXEXT];
    int which = fnsplit("d:/djgpp/bin/gcc.exe", d, p, f, e);
    d = "d:"
    p = "/djgpp/bin/"
    f = "gcc"
    e = ".exe"
    

    im notfall selber bauen



  • schau dich mal in der #include "Shlwapi.h" um, ich denke, damit kommst du am weitesten.

    #pragma comment(lib, "shlwapi.lib") nicht vergessen

    hier der msdn link:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathfindfilename.asp


Log in to reply