DWORD winapi java_如何在Delphi中连接(导入)WinApi函数

德尔福Xe4 . 例如,有两个函数(Unicode):

CryptAcquireContext,CryptGetProvParam .

我在MSDN上阅读说明:

BOOL WINAPI CryptAcquireContext(

_Out_ HCRYPTPROV *phProv,

_In_ LPCTSTR pszContainer,

_In_ LPCTSTR pszProvider,

_In_ DWORD dwProvType,

_In_ DWORD dwFlags);

BOOL WINAPI CryptEnumProviders(

_In_ DWORD dwIndex,

_In_ DWORD *pdwReserved,

_In_ DWORD dwFlags,

_Out_ DWORD *pdwProvType,

_Out_ LPTSTR pszProvName,

_Inout_ DWORD *pcbProvName);

如果我理解正确,那么翻译成Delphi应该是这样的:

{S} Function CryptAcquireContext(Out hpProv:PNativeUInt;Const Container:PWideChar;

Const Provider:PWideChar;Const ProvType:DWord;Const Flags:DWord):Bool; StdCall; External Advapi32dll Name 'CryptAcquireContextW';

{S} Function CryptEnumProviders(Const Index:DWord;Const Reserved:PDWord;Const Flags:DWord;

Out ProvType:PDWord;Out pszProvName:DWord;Var pcbProvName:DWord):Bool; StdCall; External Advapi32dll Name 'CryptEnumProvidersW';

主要对返回参数参数感兴趣,标有"OUT"和"VAR"(Out,InOut) . 因此,我不会使用interente中的各种示例 . 例如电话:

Procedure Test;

var hProv:NativeUInt;provName: array[0..200] of char;dwProvType: DWORD;

begin

...

if not CryptAcquireContext(@hProv, nil, provName, dwProvType,CRYPT_VERIFYCONTEXT) then RaiseLastOSError;

...

while CryptEnumProviders(i, nil, 0,@dwProvType, nil, @cbName)) do

begin

..

end;

给出编译错误:“E2033实际和正式var参数的类型必须相同” - 指的是@hProv和@dwProvType . 如果您想在VAR上替换OUT并在PDword(dwProvType)上替换文本@dwProvType,则会出现错误:“E2197常量对象不能作为var参数传递” .

If I do not specify the input and output parameters (like this - http://www.bvbcode.com/code/oyma7f3h-1618784, string №692), everything compiles, runs and work fine (Const - 无效果):

{S} Function CryptAcquireContext(hpProv:PNativeUInt;Container:PWideChar;Provider:PWideChar;ProvType:DWord;Flags:DWord):Bool; StdCall; External Advapi32dll Name 'CryptAcquireContextW';

{S} Function CryptEnumProviders(Index:DWord;Reserved:PDWord;Flags:DWord;ProvType:PDWord;pszProvName:PWideChar;pcbProvName:PDWord):Bool; StdCall; External Advapi32dll Name 'CryptEnumProvidersW';

在过去,我被建议采用JEDI API函数的值 . 我下载了最新版本的(http://sourceforge.net/projects/jedi-apilib/),我看到(单位JwaWinCrypt):

function CryptAcquireContext(var phProv: HCRYPTPROV; pszContainer: LPCTSTR;

pszProvider: LPCTSTR; dwProvType: DWORD; dwFlags: DWORD): BOOL; stdcall;

function CryptEnumProviders(dwIndex: DWORD; pdwReserved: LPDWORD; dwFlags: DWORD;

var pdwProvType: DWORD; pszProvName: LPTSTR; var pcbProvName: DWORD): BOOL; stdcall;

相反,调用“OUT”和“INOUT”的值写“VAR” . 但是这些我的例子都不行 . 和DWORD类型的pdwProvType和pcbProvName,虽然描述是DWORD * = PDWORD?

问题:

1)如何正确行事 . MSDN OUT = Delphi OUT还是VAR? IN_OUT = Delphi VAR?或者他们没有说明?

2)我需要写Const吗? IN = Delphi Const?

3)带指针的类型 . DWORD = Delphi Dword . 好 . DWORD * = Delphi PDWROD(或所有标记的* = Delphi指针类型)?

附:对不起英语不好 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Creating Windows CreateMDIWindow CreateWindow CreateWindowEx RegisterClass RegisterClassEx UnregisterClass Message Processing BroadcastSystemMessage CallNextHookEx CallWindowProc DefFrameProc DefMDIChildProc DefWindowProc DispatchMessage GetMessage GetMessageExtraInfo GetMessagePos GetMessageTime GetQueueStatus InSendMessage PeekMessage PostMessage PostQuitMessage PostThreadMessage RegisterWindowMessage ReplyMessage SendMessage SendMessageCallback SendMessageTimeout SendNotifyMessage SetMessageExtraInfo SetWindowsHookEx TranslateMessage UnhookWindowsHookEx WaitMessage Window Information AnyPopup ChildWindowFromPoint ChildWindowFromPointEx EnableWindow EnumChildWindows EnumPropsEx EnumThreadWindows EnumWindows FindWindow FindWindowEx GetClassInfoEx GetClassLong GetClassName GetClientRect GetDesktopWindow GetFocus GetForegroundWindow GetNextWindow GetParent GetProp GetTopWindow GetWindow GetWindowLong GetWindowRect GetWindowText GetWindowTextLength IsChild IsIconic IsWindow IsWindowEnabled IsWindowUnicode IsWindowVisible IsZoomed RemoveProp SetActiveWindow SetClassLong SetFocus SetForegroundWindow SetParent SetProp SetWindowLong SetWindowText WindowFromPoint Processes and Threads CreateEvent CreateMutex CreateProcess CreateSemaphore CreateThread DeleteCriticalSection DuplicateHandle EnterCriticalSection ExitProcess ExitThread GetCurrentProcess GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetExitCodeProcess GetExitCodeThread GetPriorityClass GetThreadPriority GetWindowThreadProcessId InitializeCriticalSection InterlockedDecrement InterlockedExchange InterlockedIncrement LeaveCriticalSection OpenEvent OpenMutex OpenProcess OpenSemaphore PulseEvent ReleaseMutex ReleaseSemaphore ResetEvent ResumeThread SetEvent SetPr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值