Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Bitmap von DLL nach App schicken will nicht so recht... (https://www.delphipraxis.net/119943-bitmap-von-dll-nach-app-schicken-will-nicht-so-recht.html)

turboPASCAL 3. Sep 2008 13:56


Bitmap von DLL nach App schicken will nicht so recht...
 
Hi,

ich werde noch Verrückt, in meiner Test-Application funktioniert es und in der
richtigen Anwendung nicht.

Ich möchte / soll, so ist die Vorderung, ein Bitmap aus meiner DLL an die Anwendung
schicken. Das soll über eine DIB-Section funktionieren.


In der Test-Anwendung sieht das folgendermasen aus:
Delphi-Quellcode:
// --- Set Bitmap to Memmory -------------------------------------------------

procedure SetBitmap;
var
  bmi: BITMAPINFO;
  _bmp: tagBITMAP;
  pDIB: PDIBSECTION;

  dwLen : Cardinal;

  p : Pointer;
  i: integer;
begin

  ZeroMemory(@bmi, sizeof(BITMAPINFO));
  with bmi.bmiHeader do
  begin
    biSize         := SizeOF(BITMAPINFOHEADER);
    biWidth        := 320;
    biHeight       := 240;
    biPlanes       := 1;
    biBitCount     := 24;
    biCompression  := BI_RGB;
    biSizeImage    := biWidth * biHeight * (biBitCount div 8);
    biXPelsPerMeter := 0;
    biYPelsPerMeter := 0;
    biClrUsed      := 0;
    biClrImportant := 0;
  end;

  with bmi.bmiHeader do
    hBMP := CreateDIBSection(hBmpDC, bmi, DIB_RGB_COLORS, p, 0, 0);

  // Fill Bitmap
  SelectObject(hBmpDC, hBMP);
  FillRect(hBmpDC, RECT(0,0,320,240), CreateSolidBrush(RGB(255,0,0)));
  SetBKMode(hBmpDC, TRANSPARENT);
  for i := 0 to 100 do
  begin
    SetTextColor(hBmpDC, RGB(0, random(256), random(256)) );
    TextOut(hBmpDC, random(320-16), random(240-16), 'X', 1);
  end;

  // Mem action

  dwLen := (bmi.bmiHeader.biWidth * bmi.bmiHeader.biHeight);

  gMem := GlobalAlloc(GPTR, Sizeof(DIBSECTION) + (dwLen * sizeof(RGBQUAD)));
  pDIB := PDIBSECTION(GlobalLock(gMem));

  GetObject(hBMP, sizeof(_bmp), @_bmp);

  pDIB^.dsBmih     := bmi.bmiHeader;
  pDIB^.dsBm       := _bmp;
  pDIB^.dsBm.bmBits := p;

  GlobalUnlock(gMem);

  p := nil;
end;

// --- Get Bitmap from Mem ---------------------------------------------------

procedure GetBitmap;
var
  bmi: BITMAPINFO;
  pDIB: PDIBSECTION;
  bp, p: pointer;
begin
  pDIB := PDIBSECTION(GlobalLock(gMem));
  bmi.bmiHeader := pDIB^.dsBmih;
  bp := pDIB^.dsBm.bmBits;

  with bmi.bmiHeader do
    hBMP2 := CreateDIBSection(hBmpDC, bmi, DIB_RGB_COLORS, p, 0, 0);

  SetDIBits(hBmpDC, hBMP2, 0, bmi.bmiHeader.biHeight, bp, bmi, DIB_RGB_COLORS);
 
  globalunlock(gMem);
end;
Wenn ich das so in die DLL und die App übernehme funktioniert es nicht.
Habe ich irgend wo 'n Fehler ?

turboPASCAL 3. Sep 2008 16:57

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
// Korrektur:

Also die DIB-Daten sowie der Pointer der Bitmap-Bits kommen richtig an.
Aber das Bitmap bleibt dunkel.

So ein Sch... scheint so das heute nicht mein Tag ist.

turboPASCAL 4. Sep 2008 19:59

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
Ich schiebe hier einfach mal, weil ich echt nicht weiter komme. :gruebel:

SirThornberry 4. Sep 2008 20:03

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
Muss es unbedingt auf diese Art und Weise geschehen? Ich hab es mir in so einem Fall recht einfach gemacht und hab nur das Bitmap-Handle übergeben und über dieses dann die Daten bezogen. (allerdings mit Hilfe der VCL (TBitmap.Handle = handle...)

turboPASCAL 4. Sep 2008 20:16

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
JA, muss so.

turboPASCAL 5. Sep 2008 18:21

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
Darf ich noch einmal, wenn auch zu einer ungünstigen Zeit, einen "Push-Versuch" wagen ?

x000x 5. Sep 2008 18:26

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
Kannst du mal eine Testapplication hochladen?

turboPASCAL 5. Sep 2008 18:36

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jupp.

x000x 5. Sep 2008 19:03

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
hm, hast du auch noch ne DLL incl. source?

SubData 5. Sep 2008 19:25

Re: Bitmap von DLL nach App schicken will nicht so recht...
 
Würde nicht ein Pointer auf die Bitmap Daten reichen?
Andere Frage: Benutzt du irgendwo gemeinsamen Speicher und hast in der Hauptanwendung "ShareMem" vergessen? ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz