Eine Form in einer DLL soll angezeigt werden



  • tach auch

    ich habe eine DLL mit dem DLL Experten erstellt. also ein standard grundgerüst.
    Dann dem projekt ein neues formular hinzugefügt (Form2). nun möchte ich aus einer exe anwendung (ebenfalls BCB) die DLL laden und dann die Form2 aus der DLL anzeigen lassen. ich kriege aber eine schutzverletzung wenn ich in der exportierten funktion die form anzeigen will. wenn ich das ganze mit einer messagebox mache, klappt es.

    DLL code:

    #include <vcl.h>
    #include <windows.h>
    #include "Unit2.h"
    #pragma hdrstop
    //---------------------------------------------------------------------------
    #pragma argsused
    //---------------------------------------------------------------------------
    __declspec(dllexport) void __stdcall Registration(); 
    //---------------------------------------------------------------------------
    void __stdcall Registration()
    {
    	//MessageBox(NULL,"geht","",48);
    	Form2->ShowModal();
    }
    //---------------------------------------------------------------------------
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
    	return 1;
    }
    

    EXE code:

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __declspec(dllimport) void __stdcall Registration();
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        HWND LoadDLL = LoadLibrary("Project1.dll");
    	if(LoadDLL)
        {
        	Registration();
            FreeLibrary(LoadDLL);	
        }	
        else
        {
        	MessageBox(NULL,"DLL konnte nicht geladen werden!","Fehler",16);
        }
    }
    


  • Morgen kann ich dir meinen Code Posten mit dem ich das mal gemacht habe.
    Allerdings hatte ich keine Probleme damit. Liegt es evtl. an der ShowModal() Funktion?




Anmelden zum Antworten