AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

API Casten ala ALIAS von VB

Ein Thema von EWeiss · begonnen am 16. Okt 2008 · letzter Beitrag vom 17. Okt 2008
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: API Casten ala ALIAS von VB

  Alt 17. Okt 2008, 09:36
Zitat von DeddyH:
Man sollte den Ausgangspost auch mal genau durchlesen. Allerdings bezweifle ich, ob das so gehen wird, denn die Funktion der DLL erwartet an der Stelle halt ein Array mit einem Element und nicht mit 256, d.h. die Record-Größe stimmt dann ja nicht. Kann aber auch sein, dass ich hier Quatsch rede.
Nein das geht schon und ist kein problem mache es ja hier nur keine Ahnung
wie ich das in Delphi umsetzen kann...

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#12

Re: API Casten ala ALIAS von VB

  Alt 17. Okt 2008, 09:44
Du könntest die Typdeklaration der Funktion ja entsprechend anpassen.
Delphi-Quellcode:
type
  TFunction = function(Originalrecord: TOriginalrecord): Ergebnistyp;
wird zu
Delphi-Quellcode:
type
  TFunction = function(DeinRecord: TDeinRecord): Ergebnistyp;
Viel Erfolg.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

Re: API Casten ala ALIAS von VB

  Alt 17. Okt 2008, 10:48
Zitat von DeddyH:
Du könntest die Typdeklaration der Funktion ja entsprechend anpassen.
Delphi-Quellcode:
type
  TFunction = function(Originalrecord: TOriginalrecord): Ergebnistyp;
wird zu
Delphi-Quellcode:
type
  TFunction = function(DeinRecord: TDeinRecord): Ergebnistyp;
Viel Erfolg.
Nein das geht auf keinen fall ich muss ja die alte weiterhin verwenden.

Hier ein Sample..

Delphi-Quellcode:
type
  TMyBitmapInfo = Record
     bmiHeader : TBitmapInfoHeader;
     bmiColors : array [0..255] of RGBQUAD;
  end;
Delphi-Quellcode:
function TSkinEngine.MyCreateDIBSection (imgHdc: Hdc; Width, Height:Integer; BitCount: Integer):Integer;
var
  bi: MYBITMAPINFO;
  p : Pointer;
begin
    bi.bmiHeader.biSize := SIZEOF(bi.bmiHeader);
    bi.bmiHeader.biWidth := Width;
    bi.bmiHeader.biHeight := Height;
    bi.bmiHeader.biPlanes := 1;
    bi.bmiHeader.biBitCount := BitCount;
    bi.bmiHeader.biCompression := BI_RGB;
    Result := CreateDIBSection(imgHdc, bi, DIB_RGB_COLORS, p, 0, 0);
end;
CreateDIBSection kennt aber MYBITMAPINFO nicht ok ?

Weil diese im Original auf
Delphi-Quellcode:
type
  PBitmapInfo = ^TBitmapInfo;
  {$EXTERNALSYM tagBITMAPINFO}
  tagBITMAPINFO = packed record
    bmiHeader: TBitmapInfoHeader;
    bmiColors: array[0..0] of TRGBQuad;
  end;
  TBitmapInfo = tagBITMAPINFO;
  {$EXTERNALSYM BITMAPINFO}
  BITMAPINFO = tagBITMAPINFO;
zeigt...
Also was ich möchte ist ähnlich wie in VB MYBITMAPINFO auf die Originale DLL verlinken.

Sollte dann eigentlich so aussehen
Org..
Delphi-Quellcode:
{$EXTERNALSYM CreateDIBSection}
function CreateDIBSection(DC: HDC; const p2: TBitmapInfo; p3: UINT;
  var p4: Pointer; p5: THandle; p6: DWORD): HBITMAP; stdcall;
Neu..
Delphi-Quellcode:
{$EXTERNALSYM CreateDIBSection}
function CreateDIBSection(DC: HDC; const p2: TMyBitmapInfo; p3: UINT;
  var p4: Pointer; p5: THandle; p6: DWORD): HBITMAP; stdcall;
gruss Emil
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: API Casten ala ALIAS von VB

  Alt 17. Okt 2008, 11:16
Nach einigen versuchen habe ich es selbst geschafft:
Hier ist die lösung...

Delphi-Quellcode:
type
  TMyBitmapInfo = Record
     bmiHeader : TBitmapInfoHeader;
     bmiColors : array [0..255] of RGBQUAD;
  end;

  function MyCreateDIBSection(DC: HDC; const p2: TMyBitmapInfo; p3: UINT;
  var p4: Pointer; p5: THandle; p6: DWORD): HBITMAP; stdcall; external 'GDI32.DLLname 'CreateDIBSection';
Delphi-Quellcode:
// Create DIB section
function TSkinEngine.skCreateDIBSection (imgHdc: Hdc; Width, Height:Integer; BitCount: Integer):HBITMAP;
var
  bi: TMyBitmapInfo;
  p : Pointer;
begin
    bi.bmiHeader.biSize := SIZEOF(bi.bmiHeader);
    bi.bmiHeader.biWidth := Width;
    bi.bmiHeader.biHeight := Height;
    bi.bmiHeader.biPlanes := 1;
    bi.bmiHeader.biBitCount := BitCount;
    bi.bmiHeader.biCompression := BI_RGB;
    Result := MyCreateDIBSection(imgHdc, bi, DIB_RGB_COLORS, p, 0, 0);
end;
aufruf als Beispiel:
hPaintBitmap := skCreateDIBSection(imgHdc, MAX(rc.Right, X), MAX(rc.Bottom, Y), 32); gruss Emil
Miniaturansicht angehängter Grafiken
crystal_119.jpg   standard_450.jpg   blur_192.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
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