Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   API Casten ala ALIAS von VB (https://www.delphipraxis.net/122478-api-casten-ala-alias-von-vbulletin.html)

EWeiss 16. Okt 2008 21:51


API Casten ala ALIAS von VB
 
Wie kann ich in Delphi ein ALIAS auf eine API Funktion realisieren.

Code:
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
Ich möchte
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;
das Array ändern bmiColors: array[0..255] of TRGBQuad
und einen eigenen Typ als MYBITMAPINFO definieren.

gruss Emil

Dax 16. Okt 2008 22:04

Re: API Casten ala ALIAS von VB
 
Delphi-Quellcode:
function foo(...): ...; external 'dll' name 'bar';

EWeiss 16. Okt 2008 22:12

Re: API Casten ala ALIAS von VB
 
Zitat:

Zitat von Dax
Delphi-Quellcode:
function foo(...): ...; external 'dll' name 'bar';

Kenn ich nicht muss mal nachlesen was foo genau macht.
Danke

gruss Emil

Dunkel 16. Okt 2008 22:23

Re: API Casten ala ALIAS von VB
 
Zitat:

Zitat von EWeiss
Kenn ich nicht muss mal nachlesen was foo genau macht.

Foo ist quasi ein Platzhalter. Man könnte auch "Irgendwas", "IhrTextKönnteHierStehen" oder ähnliches schreiben. :wink:
Edit: hier noch die gekürzte deutsche Zusammenfassung der Bedeutung von Foo.

EWeiss 16. Okt 2008 22:26

Re: API Casten ala ALIAS von VB
 
Zitat:

Zitat von Dunkel
Zitat:

Zitat von EWeiss
Kenn ich nicht muss mal nachlesen was foo genau macht.

Foo ist quasi ein Platzhalter. Man könnte auch "Irgendwas", "IhrTextKönnteHierStehen" oder ähnliches schreiben. :wink:

Das bedeutet ich muss die DLL statisch einladen(Load Library) um foo verwenden zu können ?
Oder geht das auch ohne.

gruss Emil

Dunkel 16. Okt 2008 22:28

Re: API Casten ala ALIAS von VB
 
Die Funktion der DLL dynamischen linken funktioniert auch.

EWeiss 16. Okt 2008 23:43

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

DeddyH 17. Okt 2008 08:04

Re: API Casten ala ALIAS von VB
 
Delphi-Quellcode:
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;
Die Funktion heißt hier in der DLL "Wuppdi" und angesprochen wird sie über "MyFunction". Ich kann Dir da Ollis DLL-Tutorial empfehlen.

EWeiss 17. Okt 2008 08:22

Re: API Casten ala ALIAS von VB
 
Zitat:

Zitat von DeddyH
Delphi-Quellcode:
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;
Die Funktion heißt hier in der DLL "Wuppdi" und angesprochen wird sie über "MyFunction". Ich kann Dir da Ollis DLL-Tutorial empfehlen.

So ganz verstehe ich das trotzdem nicht
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

DeddyH 17. Okt 2008 08:31

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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