Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.09.18;
Скачать: [xml.tar.bz2];

Вниз

Правильно ли переведено выражение из С в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
4-1122322363
Aldaris
2005-07-26 00:12
2005.09.18
Речевой движок Digalo


14-1124685345
Dreamse
2005-08-22 08:35
2005.09.18
Dialogic and Delphi


1-1124965022
Dust
2005-08-25 14:17
2005.09.18
ConvertStrToNetUnicode в функции ошибка


1-1125267132
vadim1
2005-08-29 02:12
2005.09.18
TReplica example


14-1124543282
palva
2005-08-20 17:08
2005.09.18
Что лучше для эстонца: знать эстонский или английский?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский