![]() |
API Casten ala ALIAS von VB
Wie kann ich in Delphi ein ALIAS auf eine API Funktion realisieren.
Code:
Ich möchte
DECLARE FUNCTION MyCreateDIBSection LIB "GDI32.DLL" ALIAS "CreateDIBSection" (BYVAL hdc AS DWORD, pbmi AS MYBITMAPINFO, BYVAL dwUsage AS DWORD, BYVAL ppvBits AS DWORD, BYVAL hSection AS DWORD, BYVAL dwOffset AS DWORD) AS DWORD
Delphi-Quellcode:
das Array ändern bmiColors: array[0..255] of TRGBQuad
type
PBitmapInfo = ^TBitmapInfo; {$EXTERNALSYM tagBITMAPINFO} tagBITMAPINFO = packed record bmiHeader: TBitmapInfoHeader; bmiColors: array[0..0] of TRGBQuad; end; TBitmapInfo = tagBITMAPINFO; {$EXTERNALSYM BITMAPINFO} BITMAPINFO = tagBITMAPINFO; und einen eigenen Typ als MYBITMAPINFO definieren. gruss Emil |
Re: API Casten ala ALIAS von VB
Delphi-Quellcode:
function foo(...): ...; external 'dll' name 'bar';
|
Re: API Casten ala ALIAS von VB
Zitat:
Danke gruss Emil |
Re: API Casten ala ALIAS von VB
|
Re: API Casten ala ALIAS von VB
Zitat:
Oder geht das auch ohne. gruss Emil |
Re: API Casten ala ALIAS von VB
Die Funktion der DLL dynamischen linken funktioniert auch.
|
Re: API Casten ala ALIAS von VB
Finde keine Themen dazu auch nicht in der Hilfe
Keine ahnung wie ich das linken soll gruss Emil |
Re: API Casten ala ALIAS von VB
Delphi-Quellcode:
Die Funktion heißt hier in der DLL "Wuppdi" und angesprochen wird sie über "MyFunction". Ich kann Dir da Ollis
type
TMyImportedFunction = function(dwFoo: DWORD): integer;stdcall; var MyFunction: TMyImportedFunction = nil; ... var h: THandle; begin h := LoadLibrary('MeineDLL.dll'); if h <> 0 then begin @MyFunction := GetProcAddress('Wuppdi'); if Assigned(@MyFunction) then Bla := MyFunction(10); end; end; ![]() |
Re: API Casten ala ALIAS von VB
Zitat:
Ich möchte nichts anderes als BITMAPINFO auf MyBITMAPINFO linken Das andere bleibt doch alles gleich .. hmmm verstehe die Technik nicht. Werd mir das Tutorial mal anschaun ob ich da einen vergleich habe. Mit DLL's kenn ich mich aus nur nicht mit foo und konsorte. Warum muss ich eine DLL einladen von der die externals schon in der Windows.pas enthalten sind. Das ist doppelt gemoppelt oder nicht ? Danke für deine beschreibung. gruss Emil |
Re: API Casten ala ALIAS von VB
:oops: 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.
|
Re: API Casten ala ALIAS von VB
Zitat:
wie ich das in Delphi umsetzen kann... gruss Emil |
Re: API Casten ala ALIAS von VB
Du könntest die Typdeklaration der Funktion ja entsprechend anpassen.
Delphi-Quellcode:
wird zu
type
TFunction = function(Originalrecord: TOriginalrecord): Ergebnistyp;
Delphi-Quellcode:
Viel Erfolg.
type
TFunction = function(DeinRecord: TDeinRecord): Ergebnistyp; |
Re: API Casten ala ALIAS von VB
Zitat:
Hier ein Sample..
Delphi-Quellcode:
type
TMyBitmapInfo = Record bmiHeader : TBitmapInfoHeader; bmiColors : array [0..255] of RGBQUAD; end;
Delphi-Quellcode:
CreateDIBSection kennt aber MYBITMAPINFO nicht ok ?
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; Weil diese im Original auf
Delphi-Quellcode:
zeigt...
type
PBitmapInfo = ^TBitmapInfo; {$EXTERNALSYM tagBITMAPINFO} tagBITMAPINFO = packed record bmiHeader: TBitmapInfoHeader; bmiColors: array[0..0] of TRGBQuad; end; TBitmapInfo = tagBITMAPINFO; {$EXTERNALSYM BITMAPINFO} BITMAPINFO = tagBITMAPINFO; Also was ich möchte ist ähnlich wie in VB MYBITMAPINFO auf die Originale DLL verlinken. Sollte dann eigentlich so aussehen Org..
Delphi-Quellcode:
Neu..
{$EXTERNALSYM CreateDIBSection}
function CreateDIBSection(DC: HDC; const p2: TBitmapInfo; p3: UINT; var p4: Pointer; p5: THandle; p6: DWORD): HBITMAP; stdcall;
Delphi-Quellcode:
gruss Emil
{$EXTERNALSYM CreateDIBSection}
function CreateDIBSection(DC: HDC; const p2: TMyBitmapInfo; p3: UINT; var p4: Pointer; p5: THandle; p6: DWORD): HBITMAP; stdcall; |
Re: API Casten ala ALIAS von VB
Liste der Anhänge anzeigen (Anzahl: 3)
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.DLL' name 'CreateDIBSection';
Delphi-Quellcode:
aufruf als Beispiel:
// 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;
Delphi-Quellcode:
gruss Emil
hPaintBitmap := skCreateDIBSection(imgHdc, MAX(rc.Right, X), MAX(rc.Bottom, Y), 32);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz