DLL , CString PAnsiChar ( PWideChar, DLL Unicode), :
type
LimitType = ( NoLimit, PotLimit, FixedLimit );
SScraperState = record
title: array[0..511] of AnsiChar;
card_common: array[0..4] of Cardinal;
card_player: array[0..9, 0..1] of Cardinal;
card_player_for_display: array[0..1] of Cardinal;
dealer: array[0..9] of Boolean;
sitting_out: array[0..9] of Boolean;
seated: array[0..9] of PAnsiChar;
active: array[0..9] of PAnsiChar;
name: array[0..9] of PAnsiChar;
balance: array[0..9] of Double;
name_good_scrape[0..9] of Boolean;
balance_good_scrape[0..9] of Boolean;
bet: array[0..9] of Double;
pot: array[0.99]: Double;
button_state: array[0.9] of PAnsiChar;
i86X_button_state: array[0..9] of PAnsiChar;
i86_button_state: PAnsiChar;
button_label: array[0..9] of PAnsiChar;
sblind: Double;
bblind: Double;
bbet: Double;
ante: Double;
limit: LimitType;
handnumber: Double;
istournament: Boolean;
end;
, , , , ScraperScrape(). Delphi , :
...
pSScraperState = ^SScraperState;
function ScraperScrape(wnd: HWND; state: pSScraperState): Integer; cdecl; external 'Scraper.dll';
...
var
CurState: SScraperState;
pCurState: pSScraperState;
begin
pCurState := @CurState;
if ScraperScrape(hWnd, pCurState) = 0 then
...
end;
pCurState:
var
CurState: SScraperState;
begin
if ScraperScrape(hWnd, @CurState) = 0 then
...
end;
It would be better to completely get rid of the pSScraperState alias:
function ScraperScrape(wnd: HWND; var state: SScraperState): Integer; cdecl; external 'Scraper.dll';
var
CurState: SScraperState;
begin
if ScraperScrape(hWnd, CurState) = 0 then
...
end;
source
share