Преобразование пути в 8.3 формат и unicode

Обсуждение программ nnCron и nnCron LITE

Преобразование пути в 8.3 формат и unicode

Postby Tez » Mon, 30 Aug 2004, 11:52

Пытаюсь сделать преобразование пути файла в старый 8.3 формат. Я впервые занимаюсь WinAPI, посему не гневайтесь. Значит два вопроса:

1. S>UNICODE вообще работает? У меня оно почему-то не всю строку преобразует. Можно с рабочим примером?

2. Нашел функцию PathGetShortPath shell32.dll (ссылка на msdn)
Syntax

void PathGetShortPath( LPWSTR pszLongPath
);

Parameters

pszLongPath
[in, out] A NULL-terminated Unicode string that contains the long path. When the function returns it contains the equivalent short path.

Return Value

No return value.
Code: Select all
S" C:\Program Files\1C\BlueByte\The Settlers IV\S4.exe" S>UNICODE S>ZALLOC
DUP DEPTH . CR PathGetShortPath DEPTH . CR
ASCIIZ> UNICODE>S MsgBox
Выдает ошибку доступа (#5) к памяти в слове ASCIIZ>. А DEPTH показывает, что PathGetShortPath даже ничего не забирает со стека! Я в нокауте.

PS
Функцию определяю так: WINAPI: PathGetShortPath shell32.dll

PPS
OS WinXP SP2
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby VK » Mon, 30 Aug 2004, 12:38

2.

Вот, цитата из мейл-листа:

-----

AW> Using the documented FOUND-SHORTFILENAME function in nnCron
AW> I've been able to get the 8.3 file NAME but not the full PATH.

AW> There's a Win API function called GetShortPathName but I'm a
AW> bit unsure how to implement it - can anyone help?

This one seems to work:

#( test_short_path
NoActive
WINAPI: GetShortPathNameA kernel32.dll
CREATE shortpath_buffer 256 ALLOT
: short_path ( a u -- a u )

DROP >R 256 shortpath_buffer R> GetShortPathNameA shortpath_buffer SWAP

;
Action:
\ displaying short path on console:
S" E:\My Documents\My Received Files" short_path TYPE CR
)#
-----
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 2 guests