Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.18;
Скачать: CL | DM;

Вниз

Правильно ли переведено выражение из С в Delphi?   Найти похожие ветки 

 
впорос   (2005-08-25 10:33) [0]

Правильно ли переведено выражение?

из:
typedef DWORD (*PMyType)(BOOL bParam, LPWSTR lpParam);

в:
type
 TMyType = function(bParam :boolean; lpParam :PWideChar) :Longword;
 PMyType = ^TMyType;


 
han_malign ©   (2005-08-25 11:49) [1]

PMyType - лишнее, TMyType - процедурный тип, в зависимости от контекста или прямого указания "@" - является указателем или "вызовом"...
TMyType = function(bParam :boolean; lpParam :PWideChar) :Longword; - если цепляется из DLL - вероятнее всего потребует указания  cdecl(extern "C"{...}) или stdcall(extern "C"{CALLBACK/APICALL/PASCAL(устаревшее)/__declspec(dllexport/dllimport)...}) .


 
впорос   (2005-08-25 11:59) [2]

конкретнее говоря мне надо перевести в Delphi эту
структуру
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthn/security/wlx_notification_info.asp

typedef struct _WLX_NOTIFICATION_INFO {  
ULONG Size;  
ULONG Flags;  
PWSTR UserName;  
PWSTR Domain;  
PWSTR WindowStation;  
HANDLE hToken;  
HDESK hDesktop;  
PFNMSGECALLBACK pStatusCallback;
} WLX_NOTIFICATION_INFO, *PWLX_NOTIFICATION_INFO;

вот эта функция PFNMSGECALLBACK pStatusCallback ...
объявлен тип следующим образом:
typedef DWORD (*PFNMSGECALLBACK)(BOOL bVerbose, LPWSTR lpMessage);

и нужно это для такой функции
void Event_Handler_Function_Name(PWLX_NOTIFICATION_INFO pInfo);
которая конечно же сидит в DLL

всё это называется Winlogon Notification Packages в MSDN


 
tesseract ©   (2005-08-25 14:10) [3]

TLoginCallback = function(bParam :boolean; lpParam :PWideChar):Longword; stdcall;
bParam скорее всего ни фига не boolean

TWLX_NOTIFICATION_INFO = packed record{  
size: cardinal;
flags:cardinal;
username:Pwidechar;
Domain:Pwidechar
WindowStation:PwideChar;
hToken:Thandle;
hDesktop:Thandle; (? не уверен)
pStatusCallback:TloginCallBack;
};
PWLX_NOTIFICATION_INFO= ^TWLX_NOTIFICATION_INFO;

Вроде так, но могу ошибаться.


 
впорос   (2005-08-25 14:13) [4]

у меня уже всё заработало .... или почти всё, но это уже другие проблемы

callback вызывается нормально с тем переводом что в самом начале


 
han_malign ©   (2005-08-25 15:13) [5]

>callback вызывается нормально с тем переводом что в самом начале
MSDN: pStatusCallback - Reserved for internal use.
- по барабану как "переводить", будет работать и так:
TWLX_NOTIFICATION_INFO = packed record  
  Size           : LongWord;
  Flags          : LongWord;
  UserName       : PWideChar;
  Domain         : PWideChar
  WindowStation  : PWideChar;
  hToken         : THandle;
  hDesktop       : THandle;
  pStatusCallback: Pointer;
end;


З.Ы. На будущее: BOOL - переводится как LongBool;
typedef int BOOL;


 
Sapersky   (2005-08-25 16:16) [6]

BOOL - переводится как LongBool

Ну да, в Дельфи...
Как-то отконвертировал сишные заголовки автоматический конвертером, и он BOOL не стал трогать - так и перевёл, т.е. в Дельфи получился LongBool. Я потом до-олго искал источник глюков... нашёл только трассировкой Си-программы. Может, конечно, это зависит от компилятора и его настроек, но VC в том конкретном случае посчитал размер bool = 1 байту. А т.к. это было поле структуры, все последующие поля "съехали"...


 
han_malign ©   (2005-08-25 16:33) [7]

>но VC в том конкретном случае посчитал размер bool = 1 байту
- ну дык, BOOL и bool - это разные типы в C(таки, case-sensitive), bool - C-generic тип с длинной 1 байт, а BOOL это платформозависимый тип, длина которого определяется разрядностью ОС...


 
впорос   (2005-08-26 09:44) [8]

ну вот набросал библиотеку для Winlogon (через WLX)

загрузка:
1. DLL_PROCESS_ATTACH
2. Startup Event
3. Logon Event
4. StartShell Event

выключение:
1. Logoff Event
2. ShutDown Event
всё

а где мой DLL_PROCESS_DETACH ?


 
han_malign ©   (2005-08-26 10:34) [9]

>а где мой DLL_PROCESS_DETACH ?
- в смысле?

Если это DLL написанная на Deplhi, то для всех подключенных модулей(unit) - на DLL_PROCESS_ATTACH вызывается секция initialization, на DLL_PROCESS_DETACH - finalization...


 
впорос   (2005-08-26 14:01) [10]

у меня ведется лог событий и лог загрузки выгрузки библиотеки
так вот загрузка библиотеки отмечается в логе, а выгрузка нет  попадает, хм.



Страницы: 1 вся ветка

Текущий архив: 2005.09.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
4-1122288327
Juice
2005-07-25 14:45
2005.09.18
Остановлен ли поток после TerminateThread ?


3-1122707436
xroot
2005-07-30 11:10
2005.09.18
EHGrid колонка


14-1124296161
Ксардас
2005-08-17 20:29
2005.09.18
А не подскажите...


8-1115289314
BasiL_666_
2005-05-05 14:35
2005.09.18
помогите хоть чемнибудь.....


14-1124794818
Shlomo
2005-08-23 15:00
2005.09.18
Первая Ошибка!?