Also die C-Deklaration der Funktion ist selten daemlich. "BYTE * const pbySerialNumbers" wird beschrieben als Zeiger auf DWORDs. Warum ist er dann nicht genau so deklariert? Die const-Angabe bei den Zeigern bedeutet das der Zeiger innerhalb der Funktion nicht veraendert werden kann, die Daten auf die er zeigt schon.
Delphi-Quellcode:
// pbySerialNumbers so deklarieren wie es der Kommentar sagt
function GetSerialNumbers(pbySerialNumbers: PDWORD;
// hier funktioniert var am besten, auch wenn der Wert dem Kommentar nach nicht veraendert wird (noch so ein dummer Fehler, die Funktion koennte hier einen zu kleinen Puffer signalisieren)
var dwSerialNumberLength: DWORD;
// eindeutig ein Output-Parameter den man mit var oder out deklariert)
var dwNbDevices: DWORD): DWORD; cdecl; external 'die.dll';
var
Serials: array [0..79] of DWORD;
LenSerials: DWORD;
NumDevices: DWORD;
begin
LenSerials := 80;
NumDevices := 0;
GetSerialNumbers(@[Serials[0], LenSerials, NumDevices);