Supportnet / Forum / Anwendungen(Java,C++...)
Borland C++ 3.1 und lange Dateinamen...
Frage
Hallo,
hat jemand von Euch eine Ahnung, wie man
ein für den BC 3.1 geschriebenes Programm dazu bringen kann, lange Dateinamen zu "verstehen"?
Ich habe es mit der Fkt 7160h des Interrupts 21h versucht. Es funktioniert aber laut MSDN nur unter Win9x (noch nicht ausprobiert). Unter Windows NT, 2000 oder XP funzt es leider nicht. *schluchz*
z.B:[code]
#include <dos.h>
#include <stdio.h>
#include <string.h>
int short_path(char *lpath, char *spath)
{
int errorcode;
asm push ds
asm lds si,dword ptr lpath
asm les di,dword ptr spath
asm mov ax,7160h
asm mov cx,1
asm int 21h
asm pop ds
asm sbb bx,bx
asm and ax,bx
asm mov [errorcode],ax
return errorcode;
}
void main(int argc, char *argv[])
{
char sp[256];
char lp[256];
int result;
strcpy(lp, argv[1]);
result = short_path((char*)&lp, (char*)&sp);
printf("%d : %s : %s", result, lp, sp);
}
[/code]Mein Problem kommt daher, dass ich von Java aus ein altes Programm aufrufen muß, das nur vom BC 3.1 übersetzt werden kann. (Umschreiben wäre zu aufwendig)
Das Programm erwartet u.a. einen Dateinamen mit vollständigen Pfad als Parameter. Das Programm kann aber nur mit der alten 8.3 Notation umgehen.
Ich kann noch ein kleines Programm dazwischen schieben, welches die Konvertierung des Pfades vornimmt und es an das alte Programm weiterleitet.
(getShortPath in Windows-API, dann mit _spawnv weiterleiten). Oder auch in Java via JNI auf die Windows-API zugreifen.
Bevor ich die tue, wollte ich doch lieber nach einer anderen/einfacheren Lösung suchen.
Gruß,
Michael
Antwort 1 von semi
Hat sich erledigt.
Das mit dem Programm dazwischen war noch die beste Lösung.
Das mit dem Programm dazwischen war noch die beste Lösung.

