Dll Prob



  • Hi, ich benutze folgenden Code in meiner erstellten dll:

    #include <vcl.h>
    #include <windows.h>
    #include "ico32.h"
    #include "Icon32.hpp"
    #pragma hdrstop
    
    extern "C" __declspec(dllexport) Graphics::TBitmap *Give32BitIcon(TMemoryStream *MStrm, int Color);
    
    #pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
    return 1;
    }
    //---------------------------------------------------------------------------
    Graphics::TBitmap *Give32BitIcon(TMemoryStream *MStrm, int Color)
    {
    Form2 = new TForm2(Application);
    Application->MessageBox(IntToStr(Color).c_str(),"",0+16);//nur zum testen
    Form2->Icon321->LoadFromStream(MStrm);
    Form2->Icon321->BlendMode = bmColor;
    Form2->Icon321->BGColor = Color;
    Form2->Show();
    return Form2->Icon321->GetBitmap();
    }
    //---------------------------------------------------------------------------
    

    Und ich benutze folgenden Code um die Dll zu laden:

    //---------------------------------------------------------------------------
    #include <vcl\vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma resource "*.dfm"
    TForm1 *Form1;
    extern "C" __declspec(dllimport) Graphics::TBitmap *Give32BitIcon (TMemoryStream*,int);
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TMemoryStream *M = new TMemoryStream();
    M->LoadFromFile("c:\\e321.ico");
    Image1->Picture->Bitmap = Give32BitIcon(M,1);
    }
    //---------------------------------------------------------------------------
    

    der Witz daran ist, im bcb5 kan ich den code zum dll laden benutzen, wenn ich den im bcb1 benutze bekomme ich in der dll nach

    Form2 = new TForm2(Application);

    eine Zugriffsverletzung 😞



  • Versuch mal anstelle von "Application" "NULL" zu übergeben:

    Form2 = new TForm2(NULL);
    

    Vielleicht hilft das.
    Hab das auch so in Tutorials zur DLL-Erstellung gesehen



  • Ne, dank dir aber das geht immer noch nicht ich hab auch schon

    Application->CreateForm(__classid(TForm2), &Form2);

    versucht. 😞

    Das komische ist ja an der Sache, dass es unter bcb5 einwandfrei klappt und unter bcb1 net 😞



  • Kann mir denn keiner helfen. 😞


Anmelden zum Antworten