Nachtrag:
In der DLL wird zwar der Frame erzeugt und gültig gemacht und zurückgegeben, aber er wird nicht angezeigt, weil Parent auf NULL (nil) steht (wird in der DLL zugewiesen).
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| TFrame * __stdcall form_load(TWinControl * lp) { if (!mainFrame) mainFrame = new TmainFrame(NULL); mainFrame->Parent = lp; mainFrame->Left = 0; mainFrame->Top = 0; return (mainFrame); } |
In der Anwendung zeigt mir dann das ShowMessage, dass Parent 0 ist:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| void __fastcall TformMain::btnLoadClick(TObject *Sender) {
if (!hDLL) hDLL = LoadLibrary((sPath+"plugins\\orders\\plugin_xtch_orders.dll").c_str());
if (hDLL && !frm) { func_formload *dll_func1; dll_func1 = (func_formload*)GetProcAddress(hDLL,"form_load"); Caption = "DLL loaded"; if (dll_func1) { Caption = "ready"; frm = dll_func1(Form1); ShowMessage(IntToStr(frm->Parent)); } } } |
Er geht also wirklich in den letzten Zweig hinein, ein ShowMessage frm->Name zeigt auch (wie erwartet) "mainFrame" an.
Aber er kann Parent nicht zuweisen...
PS: Ich weiß, es ist C/C++, aber Ihr dürftet damit wohl auch zurecht kommen...
UND: form_load ist in Deklaration UND Export stdcall!