Moin, moin!
Um die Größe meiner Applikation (EXE) in vernünftigen Rahmen zu halten möchte ich die grundliegende Daten-Maintenence (Datensätze anlegen, modifizieren und löschen) einer Tabelle in eine DLL umlagern.
EXE beinhaltet außer anderen Elementen auch einen DataModul der seinerseits einige Tabellen und Queries beinhaltet. Unter anderem auch die Tabelle, die ich in DLL bearbeiten möchte.
DLL beinhaltet folgende VCL-Elemente: TABSTable, TDataSource, TDBGrid und TDBNavigator. Alle sind miteinander verknüpft.
Ich wollte die bearbeitende Funktion (DLL) allgemein halten. Damit wollte ich erreichen, dass ich unterschiedliche Tabellen bearbeiten kann. Also dachte ich mir, dass es reichen würde, dass die Funktion den Zeiger auf die aktuell zu berbeitende Tabelle bekommt. Während der Debug-Session habe ich manche Eigenschaften der Tabelle überprüft und festgestellt, dass sie OK sind.
Formel passte alles (denke ich). Bisherige Funktionalität der Anwendung ist nicht betroffen worden, Applikation läuft wie gewohnt ohne Probleme. Die neue (und z.Zt. die einzige) DLL wird geladen und Funktion aufgerufen. Problem ist, dass das DBGrid in der DLL keine Daten zeigt. Er sieht aus als ob er mit keiner Tabelle verbunden wäre. Das gleiche betrifft den DBNavigator. Er scheint keine Verbindung zur Tabelle zu haben. Genau so sehen ein DBGrid und ein DBNavigator aus, wenn man sie zum ersten mal auf der Form platziert und noch zur keinen DataSource verbunden hat.
Und so habe ich die DLL und ihr Aufruf implementiert:
DLL:
Deklaration der Funktion (H):
Definition der Funktion (CPP):
EXE:
Aufruf der Funktion aus der Applikation:
Who can help?
Viele Grüße
Markus
Um die Größe meiner Applikation (EXE) in vernünftigen Rahmen zu halten möchte ich die grundliegende Daten-Maintenence (Datensätze anlegen, modifizieren und löschen) einer Tabelle in eine DLL umlagern.
EXE beinhaltet außer anderen Elementen auch einen DataModul der seinerseits einige Tabellen und Queries beinhaltet. Unter anderem auch die Tabelle, die ich in DLL bearbeiten möchte.
DLL beinhaltet folgende VCL-Elemente: TABSTable, TDataSource, TDBGrid und TDBNavigator. Alle sind miteinander verknüpft.
Ich wollte die bearbeitende Funktion (DLL) allgemein halten. Damit wollte ich erreichen, dass ich unterschiedliche Tabellen bearbeiten kann. Also dachte ich mir, dass es reichen würde, dass die Funktion den Zeiger auf die aktuell zu berbeitende Tabelle bekommt. Während der Debug-Session habe ich manche Eigenschaften der Tabelle überprüft und festgestellt, dass sie OK sind.
Formel passte alles (denke ich). Bisherige Funktionalität der Anwendung ist nicht betroffen worden, Applikation läuft wie gewohnt ohne Probleme. Die neue (und z.Zt. die einzige) DLL wird geladen und Funktion aufgerufen. Problem ist, dass das DBGrid in der DLL keine Daten zeigt. Er sieht aus als ob er mit keiner Tabelle verbunden wäre. Das gleiche betrifft den DBNavigator. Er scheint keine Verbindung zur Tabelle zu haben. Genau so sehen ein DBGrid und ein DBNavigator aus, wenn man sie zum ersten mal auf der Form platziert und noch zur keinen DataSource verbunden hat.
Und so habe ich die DLL und ihr Aufruf implementiert:
DLL:
Deklaration der Funktion (H):
Code:
extern "C" __declspec(dllexport) int __stdcall InvokeTabAccess(TABSTable*);
Definition der Funktion (CPP):
Code:
int __stdcall InvokeTabAccess(TABSTable *CurrTable) { TForm2 *TabAccessForm = new TForm2(NULL); TabAccessForm->ABSTable1 = CurrTable; TabAccessForm->ABSTable1->Active = true; TabAccessForm->StatusBar1->SimpleText = TabAccessForm->ABSTable1->TableName; TabAccessForm->ShowModal(); delete TabAccessForm; return 0; }
EXE:
Aufruf der Funktion aus der Applikation:
Code:
void __fastcall TfrmZE2::Button1Click(TObject *Sender) { typedef int (*dllfnct)(TABSTable*); HINSTANCE gLibMyDLL = NULL; dllfnct dllproc; gLibMyDLL = LoadLibrary("TabAccess"); if (gLibMyDLL) { dllproc = (dllfnct) GetProcAddress(gLibMyDLL, "InvokeTabAccess"); if (dllproc) { dllproc(dmEintrag->ABSTable1); } } }
Viele Grüße
Markus
Comment