' schrieb:Gut. Jetzt setzt du noch auf den Draht zum Anzeigeelement einen Breakpoint - und sagst Bescheid, ob der Breakpoint ausgeführt wird oder ob wieder die Fehlermeldung kommt.
Nein er wird nicht ausgeführt sondern die Fehlermeldung kommt.
' schrieb:Im übrigen: Du hast doch wohl die richtige Aufrufkonvention gewählt? StdCall?
Jop die passt! Funktioniert schon bei den anderen DLLs die ich eingebunden habe.
' schrieb:Und noch eins:
Probier mal folgendes aus: Besetzte das Array nicht mit Nullen vor, sondern mit Einsen. Außerdem übergibst du 100 ValidPoints (anstelle von 0) und Size=200 (anstelle von 0).
Hmm, lustige Idee *g* aber trotzdem gibts ne Fehlermeldung.
' schrieb:Was soll denn die DLL überhaupt machen?
Also wenn ich unserem Arbeitsgeber sowie unserem Projektleiter glauben kann folgendes:
Zuvor aufgerufene DLLs initialisieren eine Hardware. Diese Hardware schickt uns integerwerte zurück. Laut unserem Projektleiter ist es so das wir der DLL den Zeiger auf einen Buffer (array mit 512 Elementen) übergeben, und als "Ausgang" werden diese 512 Elemente gefüllt. Ich hoffe du kannst dir unter dieser Erklärung was vorstellen.
' schrieb:Jetzt hab' ich mir den Thread noch mal angekuckt - und bin auf folgende Inkonsistenz gestoßen. Im ersten Posting schreibst du, die DLL-Funktion sieht so "BOOL UP(HANDLE hDevice,_BUFFER_ST *buffer,LPOVERLAPPED lpOvl);" aus. Das sind drei Parameter auf dem Stack. Erzeugt hast du aber eine solche Funktion: "unsigned long up(long hDevice, unsigned short int *pBuffer, unsigned long size, unsigned long validPoints, unsigned long *lpoverlapped);". Das sind aber fünf Parameter auf dem Stack. Fünf und drei beißt sich aber - und führt garantiert zu einer AccessViolation.
Das liegt daran:
GT_GetData(HANDLE hDevice,_BUFFER_ST *buffer,LPOVERLAPPED lpOvl);
Das ist der C-Aufruf
hDevice ist 1 Wert
lpOvl wissen wir nicht, haben wir vorerst auch als 1 Wert (0) angegeben
*buffer ist eine Struktur:
typedef struct // structure used to handle buffers
{
SHORT *pBuffer; // Pointer to buffer
UINT size; // Buffersize in bytes: max. 1024 bytes
UINT validPoints; // number of data points returned from driver
}_BUFFER_ST; // (data point size is 2 bytes)
deswegen hätte ich gesagt muss man 3 Werte dafür übergeben
___________________________ Unterm Strich
1+1+3 = 5
Ausprobiert haben wir auch schon das wir für lpOvl alle in der Struktur enthaltene Werte (4*DWORD + hEvent) eigens übergeben, jedoch tritt dann das Problem mit hEvent auf...
' schrieb:Es wird dir gar nichts anderes übrigbleiben als zu warten, bis mir (oder dir oder jemand anderem) eine passende Lösung eingefallen ist.
Tja, ich hoffe dir geht es nicht wie mir und du bist mit deinem Latein am Ende *g* Vielen Dank für alles bis jetzt. Falls du einen Geistesblitz hast würde es mich freuen *g*
Boa... jetzt brauch ich erstmal einen Kaffee