Вниз
Скачать: CL | DM;

перевод кода 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.103 c
2-1346093178
s_t_d
2012-08-27 22:46
2013.03.22
Как из D-7 открыть Acrobat,?


3-1283500093
6ruse
2010-09-03 11:48
2013.03.22
ТРИГЕР


2-1329298711
ixen
2012-02-15 13:38
2013.03.22
Вопросы по потокам


15-1353477716
ClawClaw
2012-11-21 10:01
2013.03.22
Ноутбук перезагружается, когда перевожу его в режим "Сон"


2-1328511667
_QWERTY_
2012-02-06 11:01
2013.03.22
инициализировать переменную




   Наверх