banita napisał(a):a stwozyles klase formy o takiej nazwie w dll? nie!
to jest tylko przyklad! jesli masz podstawowa wiedze nie powinno byc problemu z odtworzeniem tego, jesli jest problem to chyba tzreba zaczac nauke od podstaw
TForm* form = new TForm(this);
banita napisał(a):załacz przykladowa grupe projektow(dll i aplikacja) ktora obrazuje ten blad.
In DLL
extern "C" __declspec (dllexport) void Druk ( TImage* newimage )
{
try
{
newimage->Width = 950;
newimage->Height = 1280;
newimage->Proportional = true;
newimage->Canvas->Font->Size = 9;
newimage->Canvas->Font->Name = "Verdana";
newimage->Canvas->Brush->Style = bsClear;*/
newimage->Canvas->TextOut( 20, 50, "TEST" );
Printer()->BeginDoc();
Printer()->Canvas->CopyRect(Rect(0, 0, Printer()->PageWidth, Printer()->PageHeight), newimage->Canvas, Rect(0, 0, newimage->Width, newimage->Height));
Printer()->EndDoc();
}
catch( const Exception& e ) {
ShowMessage(e.Message);
}
In main form
TImage* newimage = new TImage(NULL);
newimage->Picture->LoadFromFile( "plik.bmp" );
HINSTANCE DLLHandle = LoadLibrary(L"Projectmydll.dll");
if(DLLHandle != NULL)
{
typedef (*aDruk)(TImage*);
aDruk Druk = (aDruk)GetProcAddress(DLLHandle, "_Druk");
if( Druk != NULL) Druk( newimage );
else ShowMessage( "Lack of function" );
}
else ShowMessage( "Lack of DLL." );
FreeLibrary(DLLHandle);
delete newimage;
TImage* newimage = new TImage(this);
newimage->parent = this;
newimage->Picture->LoadFromFile( "plik.bmp" );
banita napisał(a):sprobuj jeszcze
image->Picture->Bitmap->LoadFromFile
delete newimage; // <--- wpisałem to do dll.
duf napisał(a):banita napisał(a):sprobuj jeszcze
image->Picture->Bitmap->LoadFromFile
BINGO!!!
Błąd access violation zmienił kierunek z DLL na project główny. Z głównej aplikacji usunąłem zapis
- Kod: Zaznacz cały
delete newimage; // <--- wpisałem to do dll.
i wydaje się, że wszystko już zachodzi poprawnie. Tyle czasu. Dziękuję za pomoc.
banita napisał(a):
nie wolno ci alokowac zasobu w aplikacji i zwalniac go w dll!!!!!!
czytaj co napisal CB w ostatnim poscie
FreeLibrary(DLLHandle);
delete newimage;
duf napisał(a):
- Kod: Zaznacz cały
delete newimage; // <--- wpisałem to do dll.
Cyfrowy Baron napisał(a):Chodzi o ten fragment Twojej wypowiedzi:duf napisał(a):
- Kod: Zaznacz cały
delete newimage; // <--- wpisałem to do dll.
wpisałem to do dll
czyli wynika z tego, że definiujesz obiekt w aplikacji, a usuwasz go w bibliotece, co jest niedopuszczalne. Definiujesz w aplikacji, więc usuwasz w aplikacji.
polymorphism napisał(a):A ja zapytam przewrotnie: po co ta DLL-ka?
duf napisał(a):Jak usuwam w aplikacji to jest błąd access violation
Powrót do Biblioteki i komponenty
Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość