Hallo!
Ich möchte mit Hilfe von AutoIT einen Barcode-Scanner auslesen. Dieser Hat einen internen Speicher, der die Codes speichert. Über die "Csp2.dll" kann man Befehle an den Scanner schicken. Einen einfachen DLLCall, der nur die Anzahl der gelesenen Barcodes zurückgibt, habe ich schon hinbekommen.
Wie aber spreche ich diese DLL-Funktion an:
ZitatAlles anzeigenGet Packet
NoMangle long DLL_IMPORT_EXPORT csp2GetPacket ( char szBarData[],
long nBarcodeNumber,
long nMaxLength )
The csp2GetPacket() function copies the packet data to the users allocated memory
space from the DLL. The user will need to interpret the packet structure to obtain
barcode information and timestamp. Please refer to Symbol Document CS1504 Data
Upload Format for a description of the packet formats. The function will only copy up to
the nMaxLength characters. If the barcode is longer it will be truncated. The user must
specify which barcode they want (refer to csp2ReadData()) and the maximum length of
the allocated space they have reserved.
Where:
szBarData is a character array the user has allocated to hold the barcode
data. This is not a null terminated string. The amount of data actually returned
in the array is the return value of the function call. Note that this data may be
non-ASCII values.
nBarcodeNumber is which barcode stored in the szCspBcString[ ] will be
returned. Please note that this number is a zero-based index. For example if
csp2ReadData() returned the number 5. Then the barcode indexes would be 0,
1, 2, 3, and 4.
nMaxLength is the length of the allocated space. If nMaxLength is set to
DETERMINE_SIZE, the function will return the length of the packet without
copying any data. Note, if the user specifies the space is bigger than was
actually allocated, unpredictable results will occur.
Returned Status:
length of packet – (Not the number of bytes written)
BAD_PARAM if the user requested a packet that does not exist.
Note: The value returned by this function will reflect the value of the parameter in the
device at the time of the last call to the csp2ReadData() function. In order to receive an
accurate current parameter value, be sure that the call to csp2ReadData() function is
current.
Example:
long nBarcodes;
long nLen;
long i;
char aByteBuffer[100];
// Open the com port
CS1504 32-bit DLL for Visual C/C++
21
if (csp2Init(COM1) == STATUS_OK) {
// Read the data from CSP Device
nBarcodes = csp2ReadData();
if (nBarcodes > 0) {
for (i=0; i<nBarcodes; i++) {
// Barcodes available
nLen = csp2GetPacket(aByteBuffer, i, sizeof(aByteBuffer));
// Check to if we received the entire barcode
if (nLen <= sizeof(aByteBuffer)) {
// We have the entire bar code.
// Process Barcode
}
else {
// We need to supply a larger buffer
ASSERT(0);
}
}
}
}
Das habe ich mir mit Unterstützung der Hilfe mal gestrickt, ist aber wohl völlig falsch:
[autoit]$wert = DllStructCreate("char,long,long")
DllCall($dll,"long","csp2GetPacket","ptr",DllStructGEtPtr($wert))
$1 = DllStructGetData($wert,1)
$2 = DllStructGetData($wert,2)
$wert = 0
MsgBox (0, "Packet", $1 & $2)
Kann mir hier bitte jemand helfen?