Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.07.11 18:10 
Hallo,

// EDIT: Selbst gefunden, siehe unten.

ich habe eine Delphi Prism Assembly, die unmanaged DLL Funktionen exportiert. Diese werden wiederum aus Delphi für Win32 aufgerufen.

Jetzt möchte ich eine Bitmap an die DLL übergeben. Dafür habe ich einen HBitmap Parameter vorgesehen. Leider kommt dabei die Fehlermeldung "Allgemeiner Fehler in GDI+.", wenn ich das Handle in .NET verwenden will.

Ich benutze Image.FromHbitmap um das Handle in ein .NET Objekt zu verwandeln. Muss ich da bei einem unmanaged Handle noch etwas besonderes machen?

Hier der entsprechende Code, etwas gekürzt:
ausblenden Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
    [UnmanagedExport('xyz', CallingConvention.StdCall)]
    method xyz(BitmapHandle: IntPtr): Boolean;

method x.x.xyz(BitmapHandle: IntPtr): Boolean;
begin
  var PrintImage: Bitmap := Image.FromHbitmap(BitmapHandle);
  PrintImage.Save('c:\temp\xyz.bmp');
Und der Aufruf:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    TPrintBitmapFromHandle = function(PrinterHandle: LongInt; BitmapHandle: HBitmap): Boolean; stdcall;

...

  xyz(OutputBitmap.Handle);
Hat jemand eine Idee?

Vielen Dank,
schönen Gruß,
Sebastian

// EDIT:
Ok, damit ich das Handle nutzen kann, reicht es, wenn ich es mit OutputBitmap.ReleaseHandle freigebe. Damit hat sich das Problem erledigt.