000
30.06.2004, 17:48 Uhr
~BokonTaylay
Gast
|
Hola!
Ich habe folgendes Problem:
Innerhalb einer DLL benötige ich zum Anzeigen von Daten, die ich von der seriellen Schnittstelle gelesen habe, ein neues Window. Dazu habe ich eine Klasse übernommen, die von CFrameWnd abgeleitet ist. Im Konstruktor wird ein Zeiger auf ein Array und ein int übergeben.
C++: |
CDataWnd::CDataWnd(BYTE * buffer, int length) { itsLength = length; itsBuffer = buffer; Create(NULL, "Data", WS_VISIBLE|WS_OVERLAPPEDWINDOW, CRect(0,0,500,500)); UpdateWindow(); }
|
Nun soll das Window innerhalb einer Funktion "Anzeigen" erzeugt werden und dann in der KlassenMethode OnPaint() beschrieben werden.
C++: |
void ShowData(BYTE sBuffer[], int iLength, UINT iAdresse)
{ /* Fenster erzeugen und Daten anzeigen */ CFlashDataWnd *flashDataWnd = new CFlashDataWnd(sDataBuffer, iLength) ;
}
void CDataWnd::OnPaint() { ......
for (lPos = 0; lPos < itsLength; lPos++) { ... dc.DrawText(sDataline, &rect ,DT_LEFT ); .... }
|
Danach soll die Funktion ShowData ()zurückkehren. Soweit funktioniert's ja, aber sobald ich dann irgendwas im Fenster mache (z.B. mit dem Cursor hineinfahren) bekomme ich eine Access Violation. Es verliert ja irgendwie die Gültigkeit, wenn die Funktion zurückkehrt. Was ich machen will, ist, dass man erst das Fenster schließen muss, damit die Funktion ShowData() zurückkehrt und dann sollte es ja keine Probleme mehr geben. Bzw. gibt es eine möglichkeit, dass das Fenster auch danach noch gültig ist?
Das Ganze läuft wie gesagt in einer DLL, die wiederum in einem Applikationsprogramm geladen wird, ist also nicht unbedingt einfach zu handlen.
Danke schon mal im voraus!
|