Ich möchte eine DLL-Funktion einbinden die einen Pointer auf ein Struktur-Array erwartet. (+max. Anzahl der Strukturen) . Für jedes gefundene Gerät wird eine Struktur ausgefüllt.
Die Funktion gibt die Anzahl der ausgefüllten Strukturen nach dem Aufruf zurück.
In C schaut das ca. so aus:
Spoiler anzeigen
struct
{
unsigned long snr;
char name[256];
int dhcp;
char ip[24];
char netmask[24];
char gateway[24];
int signature;
}DevDataRecord
DevDataRecord dda[4]; // create DevData array
int numOfDevs = CCGetAllDevsInArray(&dda[0], 4); // get all found devices
// dda[0].snr ... serial number first found device
// dda[1].snr ... serial number second found device
Alles anzeigen
Wenn ich die DLL nun in AutoIt benutzen will wie muss ich da jetzt mit "DllStructCreate" die Struktur erstellen?
Muss ich da jetzt 5mal hintereinander die daten eintippen?
Spoiler anzeigen
Local $tagDDA=""
$tagDDA &= "STRUCT; ULONG snr1; CHAR name1[256]; int dhcp1; CHAR ip1[24]; char netmask1[24]; char gateway1[24]; int signature1; ENDSTRUCT"
$tagDDA &= "STRUCT; ULONG snr2; CHAR name2[256]; int dhcp2; CHAR ip2[24]; char netmask2[24]; char gateway2[24]; int signature2; ENDSTRUCT"
$tagDDA &= "STRUCT; ULONG snr3; CHAR name3[256]; int dhcp3; CHAR ip3[24]; char netmask3[24]; char gateway3[24]; int signature3; ENDSTRUCT"
$tagDDA &= "STRUCT; ULONG snr4; CHAR name4[256]; int dhcp4; CHAR ip4[24]; char netmask4[24]; char gateway4[24]; int signature4; ENDSTRUCT"
Local $DDA_struct = DLLSTRUCTCREATE($tagDDA)
[/autoit] [autoit][/autoit] [autoit]Local $aReturn = DllCall('ChipControl.dll', 'int', 'CCGetAllDevsInArray', 'struct*', $DDA_struct, 'int', 4)
Da ich momentan nur ein Device habe das gefunden wird kann ich es nicht ausprobieren ob es so passt.
Bzw. gibt es eine Möglichkeit das ich so a la DDA[1].snr darauf zugreifen kann?
Bzw. noch eine andere Frage, bin nicht so fix mit den Pointern
Sind die beiden Varianten beim DllCall gleichwertig?
Local $aReturn = DllCall('ChipControl.dll', 'int', 'CCGetAllDevsInArray', 'struct*', $DDA_struct, 'int', 4)
bzw.
Local $aReturn = DllCall('ChipControl.dll', 'int', 'CCGetAllDevsInArray', 'ptr', DllStructGetPtr($DDA_struct), 'int', 4)
THX,
Indi2Go