Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Інше";
Поточний архів: 2018.12.23;
Завантажити: [xml.tar.bz2];

Вниз

Допоможіть переписати код C ++ на Delphi Знайти схожі гілки


xteam777 ©   (2016-10-11 10:56) [0]

З цими покажчиками вже весь мозок поламав.

BOOL
GetFilenameFromHandle (HANDLE hFile) {

BOOL bSuccess = FALSE;
TCHAR * pszFilename [MAX_PATH + 1];
uint uMaxLenDest = 0;

// Отримуємо розмір файлу.
DWORD dwFileSizeHi = 0;
DWORD dwFileSizeLo = GetFileSize (hFile, & dwFileSizeHi);

// Робимо мапінг файлу.
HANDLE hFileMap = CreateFileMapping (hFile,
NULL,
PAGE_READONLY,
0,
dwFileSizeLo,
NULL);

if (hFileMap) {
// Маппінг для отримання імені файлу.
void * pMem = MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0, 1);

if (pMem) {
if (GetMappedFileName (GetCurrentProcess (),
pMem,
pszFilename,
MAX_PATH)) {

// Переводимо шлях з ім'ям пристрою в букву диска
TCHAR szTemp [512];
* SzTemp = NULL;

if (GetLogicalDriveStrings (MAX_ARRAY_ITEMS (szTemp) -1,
szTemp)) {
TCHAR szName [MAX_PATH];
TCHAR szDrive [3] = TEXT ( ":");
BOOL bFound = FALSE;
TCHAR * p = szTemp;

do {
// Копіюємо букву диска в тимчасову рядок,
// видаляючи зворотний слеш.
* SzDrive = * p;

// Перевіряємо кожне ім'я пристрою.
if (QueryDosDevice (szDrive, szName,
MAX_ARRAY_ITEMS (szName))) {
uint uNameLen = _tcslen (szName);

// Якщо більше, ніж довжина імені файлу, то не задовольняє
if (uNameLen <uMaxLenDest) {
bFound = _tcsnicmp (pszFilename, szName, uNameLen)
== 0;

if (bFound) {
// Заново створюємо pszFilename використовуючи szTemp і
// замінюємо шлях пристрої нашим DOS-шляхом.
TCHAR szTempFile [MAX_PATH];
_stprintf (szTempFile,
TEXT ( "% s% s"),
szDrive,
pszFilename + uNameLen);
stringCopy (pszFilename, szTempFile, uMaxLenDest);
}
}
}

// Переходимо до наступного нульового символу.
while (* p ++);
} While (! BFound && * p); // в кінці рядка
}
}
bSuccess = TRUE;
if (! UnmapViewOfFile (pMem)) assert (0);
}

if (! CloseHandle (hFileMap)) assert (0);
}
return (bSuccess);
}



stas ©   (2016-10-11 14:04) [1]

Ви краще напишіть що не зрозуміло.



kilkennycat ©   (2016-10-11 15:17) [2]

http://forum.vingrad.ru/topic-11150.html



xteam777 ©   (2016-10-11 16:53) [3]

Спасибі величезне за посилання.
Але код не компілюється. Пише помилку в рядку:

var p: PChar;
...

inc (cardinal (p));
Left sude can not be assigned too

Не розумію, що тут робиться навіть



stas ©   (2016-10-11 17:07) [4]

Заміни його на p: = p + 1;



Dimka Maslov ©   (2016-10-11 18:02) [5]

У Delphi не було і немає арифметики покажчиків. Треба писати Inc (PCardinal (P) ^);



iop ©   (2016-10-11 18:22) [6]

з фіга чи? (Типізовані покажчики)

inc (p) і все.



xteam777 ©   (2016-10-12 00:03) [7]

Дякуємо. Так працює: inc (p)



KSergey ©   (2016-10-12 07:41) [8]

> Dimka Maslov © (11.10.16 18: 02) [5]
> У Delphi не було і немає арифметики покажчиків. треба писати
> Inc (PCardinal (P) ^);

Серйозно ?!



Inovet ©   (2016-10-12 08:09) [9]

> [5] Dimka Maslov © (11.10.16 18: 02)
> У Delphi не було і немає арифметики покажчиків. треба писати
> Inc (PCardinal (P) ^);

Я ніколи не писав на Делфі, сюди забрів бо Білдер є, але твоє повідомлення мене трохи збентежило - як же немає цієї арифметики покажчиків, щось я серйозно упустив в знанні Делфі, та й взагалі в логіці побудови сучасної мови програмування, ну в яких з пам'яттю треба працювати. Де я неправий?



KSergey ©   (2016-10-12 09:02) [10]

Почитав інтернет. (Вибачте, звичайно, напевно в довідці це написано теж, але я не вмію пам'ятати все цитати або хоча б їх місця, як ІШ.)

Виявляється в Delphi адресна арифметика підтримана тільки для покажчиків типу PChar і тільки при використанні функцій Inc () і Dec ().

Згадалася моя тема
http://delphimaster.net/view/15-1454583291/

Схоже, до неї це теж може бути застосовано: операція "відняти покажчик з покажчика" - типу неприпустима (не підтримали), тому і працює "як вийшло".



iop ©   (2016-10-12 09:31) [11]

тільки для покажчиків типу PChar

ага.
тільки там все покажчики "типу PChar", за винятком Pointer



Dimka Maslov ©   (2016-10-12 09:34) [12]


> KSergey © (12.10.16 09: 02) [10]


Значить, серйозно. А один PChar в програмі не покажчик.



iop ©   (2016-10-12 09:48) [13]

Виявляється в Delphi адресна арифметика підтримана тільки для покажчиків типу PChar і тільки при використанні функцій Inc () і Dec ().


залишилося згадати що повний інк та грудні це (var X: Ordinal; [N: integer])
і то що PChar нічим в цих інках і деках не відрізнятиметься від будь-якого іншого типізованого покажчика.



Inovet ©   (2016-10-12 10:43) [14]

> [10] KSergey © (12.10.16 09: 02)
> Згадалася моя тема
> http://delphimaster.net/view/15-1454583291/

Я цей код почитав як заклинання. Нічо так вийшло, можна вбити мага початковій програмістської ступені.



Inovet ©   (2016-10-12 10:48) [15]

Ну вас всіх з вашими цими дивними покажчиками.



Inovet ©   (2016-10-12 10:48) [16]

вилучено модератором



stas ©   (2016-10-12 13:19) [17]

Dimka Maslov © (11.10.16 18: 02) [5]
KSergey © (12.10.16 09: 02) [10]

Ну, не знаю, що там і де не підтримується, в XE p: = p + 1; працює нормально.



Rouse_ ©   (2016-10-12 15:09) [18]

Адресна арифметика підтримується для будь-якого типизированного покажчика, особливо коли його не каста до цілочисельним типам.
Ази-азів



сторінки: 1 вся гілка

Форум: "Інше";
Поточний архів: 2018.12.23;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.63 MB
Час: 0.022 c
15-1475789401
Юрій
2016-10-07 00:30
2018.12.23
З Днем народження ! 7 жовтня 2016 п'ятницю


15-1475753599
Gavana
2016-10-06 14:33
2018.12.23
автопоновлення даних


15-1476200879
Хто б сумнівався
2016-10-11 18:47
2018.12.23
А є розширення для хрому для перевірки email?


15-1475791274
Германн
2016-10-07 01:01
2018.12.23
Світла пам'ять Анатолію Підгорецькому!


8-1246160987
ormada
2009-06-28 07:49
2018.12.23
розрізати відео файл





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в&#39;єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська