Tipy a triky v Delphi, díl 171. – DLL knihovny podruhé

Diskuze čtenářů k článku

PQ  |  23. 03. 2005 16:14  | 

Volám fci BOOLEAN PacketGetAdapterNames (PTSTR pStr, PULONG BufferSize)
z externího souboru packet.dll. (jedná se o součást známého WINPCAP)

Mé volání z Delphi 7:
function PacketGetAdapterNames(Data:pointer;BufferSize:pointer):boolea n; external 'packet.DLL';

var
Size:pulong;
Data:array [0..29999]of widechar;
BufferSize:word;

...
BufferSize:=SizeOf(Data);
Size:=@BufferSize;
if PacketGetAdapterNames(@Data,Size) then
....

Vždy mi ale volání skončí chybou a "oknem procesoru" - registry atd.
Můžete mi někdo říci, kde mám chybu?
(buffer je dost velký, zkoušel jsem dávat i poloviní Size, jako počet wcharů a ne bajtů, ale změna žádná.
Dík.

Souhlasím  |  Nesouhlasím  |  Odpovědět
hekrhy  |  17. 09. 2006 18:39  | 

ta PacketGetAdapterNames urcite bude stdcall, to bude ta chyba ;)

Souhlasím  |  Nesouhlasím  |  Odpovědět
avatar
30. 06. 2016 12:35 | Microsoft Windows 10 Chrome 51.0.2704.84

Když volám z knihovny funkci, která vrací číslo (u mne smallint), tak to jde ok. Jakmile ale strejným způsobem volám text (string), funkce se provede a hodnota se předá, ale výskočí chyba "Invalid pointer Operation". Vše mám správně nastaveno, rozdíl je pouze v typu (číslo jde, text nejde).
Dost mne to potrápilo, protože jsem hledal chybu u sebe, ale byla v tom typu. Při redeklaraci stringu na WideString vše funguje.
Pokud se to někomu také takto nedařilo, tímto se chci podělit o tuto zkušenost.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor
Aktuální číslo časopisu Computer

Megatest 24 PC zdrojů

Jak využít umělou inteligenci

10 špičkových sluchátek s ANC

Playstation 5 vs Xbox Series X