Ansteuern einer Dll und füllen einer CGauge
-
Hallo zusammen,
ich nutze für meine Anwendung eine Funktion, die ich in eine .dll ausgelagert habe. Der Aufruf erfolgt aus dem Hauptprogramm nur ein einziges Mal und es wird eine Matrix mit double Werte übergeben.
Das ganze sieht in etwa so aus:
void __fastcall TForm1::Button1Click(TObject *Sender) { typedef double** __stdcall TOpt(int a,int b,int c,int d,int e); HINSTANCE h=LoadLibrary("Optimierung.dll"); TOpt* optm=(TOpt*)GetProcAddress(h,"_optm"); double** opt; int a=StrToInt(Edit1->Text); int b=StrToInt(Edit2->Text); int c=StrToInt(Edit3->Text); int d=StrToInt(Edit4->Text); int e=StrToInt(Edit5->Text); opt=optm(a,b,c,d,e); ... ... ... FreeLibrary(h); }Wie schaffe ich es denn jetzt, das ich auf dem Hauptformular ein CGauge fülle, entsprechend der Bearbeitungszeit in der .dll?
Im Hauptprogramm kann ich dies ja nicht steuern, da der Befehl nur einmal aufgerufen wird, das Programm in die .dll wandert und nach dem Durchlauf wieder im Hauptprogramm erscheint.
In der .dll wird hauptsächlich mit Schleifen gearbeitet, die Schleifenindizes könnten ja dann für das Füllen der CGauge verwendet werden.
{ CGaube->MaxValue=i*j*k; for (i=0;i<Wert1;i++) { for (j=0;j<Wert2;j++) { for (k=0;k<i*j+1;k++) {... ... CGauge->Process++; } ... ... CGauge->Process++; } ... ... CGauge->Process++; } ... ... }Nur leider fällt mir jetzt keine Möglichkeitein wie ich aus der .dll das CGauge im Hauptprogramm ansteuere.
Danke und liebe Grüße
Todd
-
Hallo
Es gibt zwei Möglichkeiten : Das Gauge als Zeiger an die optm-Funktion übergeben. Da du sicher dein C-Interface Beibehalten willst must du das als void-Zeiger machen und in der Funktion wieder in CGauge zurückcasten. Der Nachteil ist das damit natürlich in der Funktion nur VCL-Gauge behandelt werden kann und die DLL auch die VCL includen muß.
Der eigentliche Weg der die (von mir angenommene) VCL-Unabhängigkeit wahrt ist die Verwendung einer Callback-Methode.bis bald
akari
-
Danke akari für deine schnelle Antwort.
Leider funktioniert der Link bei mir nicht.Sind Callback Funktionen WinAPI Funktionen? Wenn ja dann müssten sie ja allgemeingültig sein und ich könnte mir die Syntax auf der msdn Seite durchlesen.
Gruß
Todd
-
Hallo
Callbacks werden auch oft in der WinAPI benutzt, zum Beispiel bei CopyFileEx (dort für genau den selben Zweck, eine Fortschrittsnachricht). Die Syntax ist natürlich reines C.
Der Link jedenfalls ist jedenfalls in Ordnung. Natürlich kannst du auch selber die Forums-SuFu und Google nach "function pointer" und "callback" durchsuchen.bis bald
akari