Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизперевод кода C Найти похожие ветки
← →
Scott Storch © (2012-03-06 16:38) [0]
#ifdef UNICODE
#define CreatePatchFile CreatePatchFileW
#define ApplyPatchToFile ApplyPatchToFileW
#else
#define CreatePatchFile CreatePatchFileA
#define ApplyPatchToFile ApplyPatchToFileA
#endif // UNICODE
Тут константам-функциям присваивается функция. Нужно это корректно перевести на Delphi:
Вот что я набросал, насколько это правильно?
{$IFDEF UNICODE}
TCreatePatchFile = function (OldFileName: LPCWSTR; NewFileName: LPCWSTR;
PatchFileName: LPCWSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
{$ELSE}
TCreatePatchFile = function (OldFileName: LPCTSTR; NewFileName: LPCTSTR;
PatchFileName: LPCTSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
{$ENDIF}
function CreatePatchFileA(OldFileName: LPCTSTR; NewFileName: LPCTSTR;
PatchFileName: LPCTSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
function CreatePatchFileW(OldFileName: LPCWSTR; NewFileName: LPCWSTR;
PatchFileName: LPCWSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
function ApplyPatchToFileA(PatchFileName: LPCTSTR; OldFileName: LPCTSTR;
NewFileName: LPCTSTR; ApplyOptionFlags: ULONG): BOOL; stdcall;
function ApplyPatchToFileW(PatchFileName: LPCWSTR; OldFileName: LPCWSTR;
NewFileName: LPCWSTR; ApplyOptionFlags: ULONG): BOOL; stdcall;
implementation
const
mspatcha = "mspatcha.dll";
mspatchc = "mspatchc.dll";
function CreatePatchFileA; external mspatchc name "CreatePatchFileA";
function CreatePatchFileW; external mspatchc name "CreatePatchFileW";
function ApplyPatchToFileA; external mspatcha name "ApplyPatchToFileA";
function ApplyPatchToFileW; external mspatcha name "ApplyPatchToFileW";
const
{$IFDEF UNICODE}
CreatePatchFile: TCreatePatchFile = CreatePatchFileW;
{$ELSE}
CreatePatchFile: TCreatePatchFile = CreatePatchFileA;
{$ENDIF}
end.
← →
Dimka Maslov © (2012-03-06 17:11) [1]Посмотри как это правильно сделано в модуле Windows.pas и не запиливай в свою прогу ужасающих костылей.
← →
Scott Storch © (2012-03-06 17:33) [2]в windows.pas api-функция без суффикса A или W всегда ссылается на юникод-функцию. В С определяется директивой компилятора UNICODE. Нужно сделать так, что если проект delphi собирается с директивой UNICODE, функция CreatePatchFile должна ссылаться на CreatePatchFileW иначе на CreatePatchFileA. Могу конечно сделать так:
function CreatePatchFileA(OldFileName: LPCTSTR; NewFileName: LPCTSTR;
PatchFileName: LPCTSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
function CreatePatchFileW(OldFileName: LPCWSTR; NewFileName: LPCWSTR;
PatchFileName: LPCWSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
{$IFDEF UNICODE}
function CreatePatchFile(OldFileName: LPCWSTR; NewFileName: LPCWSTR;
PatchFileName: LPCWSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
{$ELSE}
function CreatePatchFile(OldFileName: LPCTSTR; NewFileName: LPCTSTR;
PatchFileName: LPCTSTR; OptionFlags: ULONG;
OptionData: PPATCH_OPTION_DATA): BOOL; stdcall;
{$ENDIF}
{$IFDEF UNICODE}
function CreatePatchFile; external mspatchc name "CreatePatchFileW";
{$ELSE}
function CreatePatchFile; external mspatchc name "CreatePatchFileA";
{$ENDIF}
но может есть более красивый вариант, вот и спрашиваю.
← →
Dimka Maslov © (2012-03-06 17:39) [3]
> в windows.pas api-функция без суффикса A или W всегда ссылается
> на юникод-функцию
Это потому-что делфя теперь юникодовская и отката назад не будет. Коли имеется желание запилить код для винтажных версий, то надо
1. в Ansi версии использовать тип PAnsiChar
2. в Unicode — PWideChar
3. В функциях без суффикса — PChar.
← →
Dimka Maslov © (2012-03-06 17:41) [4]А вообще делфя это не загнивающие си. Тут такие фокусы не прокатывают. Либо юникод, либо не юникод и определяется это не директивами компиляции, а версией среды. И символа UNICODE может и не быть, а быть только символ, определяющий версию системы.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.063 c