Aus externe Dll - Globale Variables / ReceiveData Retrun
-
Und was ist jetzt Dein Problem? Ist doch alles beschrieben, oder?
-
Ganz einfach ich weiss nicht wie ich an die Date kommen soll.
BOOL DllReceiveData( BYTE* pbyBuffer, DWORD* pdwLength )wie geht man sowas an? DllSendAsciiString war ja einfach.
Aber keine Ahnung wie ich das aufbauen soll damit ich die Daten bekomme. Ich verstehe nicht wie ich da die länge angeben soll weiss ja nicht was vorher von dem gerät ja gesendet wird.
und BYTE als referenz angeben oder wie bekomme ich die Daten? 
Kann mir denn da keinder da weiter helfen?
-
Du reservierst sowohl für pbyBuffer als auch pdwLength Speicherplatz. Wieviel Platz für den Buffer benötigt wird, geht aus deinem Auszug nicht hervor.
BYTE myBuffer[MAXIMALE_LAENGE]; // die maximale Länge sagt dir das PDF DWORD myBufferLength; // hier kommt die Anzahl der gelesenen Bytes rein if (DllReceiveData(&myBuffer, &myBufferLength){ do_something_with(&myBuffer, &myBufferLength); // in myBuffer sind jetzt die Daten, und zwar myBufferLength Bytes } else { // hat nicht funktioniert }Bitte sehr.
-
Danke schön.
werde ich sofort ausprobieren.
-
shit jetzt kommt Compiler fehler:
Code
BYTE myBuffer[48]; // die maximale Länge sagt dir das PDF DWORD myBufferLength; // hier kommt die Anzahl der gelesenen Bytes rein if (DllReceiveData(&myBuffer, &myBufferLength)){ do_something_with(&myBuffer, &myBufferLength); // in myBuffer sind jetzt die Daten, und zwar myBufferLength Bytes } else { cout << "hat nicht funktioniert" << endl; }Compiler:
97 I:\Dev-Cpp\TestCom4\SXSerial.cpp cannot convert `BYTE (*)[48]' to `BYTE*' in argument passingTHX
-
Dann probiers mit
BYTE* myBuffer = new BYTE[HIER_DIE_GROESSE_EINTRAGEN]; /* dein Code */ delete[] myBuffer; // nicht vergessen
-
Mach das "&"-Zeichen vor dem "myBuffer" weg...
if (DllReceiveData(myBuffer, &myBufferLength){ do_something_with(&myBuffer, &myBufferLength); // in myBuffer sind jetzt die Daten, und zwar myBufferLength Bytes } else { // hat nicht funktioniert }
-
Ja so muß das sein Jochen.

So funktioniert einwandfrei:
if (DllReceiveData(myBuffer, &myBufferLength)){ parseData(myBuffer, &myBufferLength); }Vielen Dank an euch!!!!

Aber jetzt hätte ich gerne noch ne kleine frage und zwar:
In der pdf-dll steht
"DLL global variables"Beispiel:
csComInfo [Summary] System information [Declaration] COMINFO csComInfo; [Description] Retains necessary information when the port opens. [Structure] typedef struct{ BOOL fConnect; Port connection completion flag (FALSE: Incomplete, TRUE: Completed) HWND hWnd; Owner window handle HANDLE hCom; Communication handle UINT uiTimerNo; Timer No. UINT uiTimerWait; Timer interrupt interval BOOL fTimerSw; Timer operating status (FALSE: OFF, TRUE: ON) DWORD dwPort; Port (1: COM1, 2: COM2) BYTE byDataBit; Data bit (7: 7 bits, 8: 8 bits) BYTE byStopBit; Stop bit (0: 1 bit, 1: 1.5 bits, 2: 2 bits) BYTE byParity; Parity (0: None, 1: Odd number, 2: Even number) DWORD dwBaudRate; Baud rate (300 - 38400) OVERLAPPED osWrite; API information OVERLAPPED osRead; API information HANDLE hFncThread; API information DWORD dwThreadID; API information } COMINFO, NEAR *NPCOMINFO;kann man das auch abfragen???? z.B Referenz oder Pointer da drauf???
-
Les doch die Doku ob es da eine Funktion gibt die Dir ein "COMINFO" zurückliefert!
-
Habe ich schon aber leider hat die dll so eine funktion nicht.
Da steht nur2. DLL global variables
Variable Table csComInfo System information csFatalErr Fatal error information csWarningErr Warning error information usw..
-
Das müsste auch mit GetProcAddress gehen...
Schau mal mit www.dependencywalker.com nach, wie die Namen in der DLL wirklich heissen...