Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie kann ich eine C++ DLL nutzen? (https://www.delphipraxis.net/132113-wie-kann-ich-eine-c-dll-nutzen.html)

divBy0 6. Apr 2009 13:35


Wie kann ich eine C++ DLL nutzen?
 
Hallo,

also ich würde gerne eine DLL nutzen, die mit C++ erstellt wurde.
Da ich das bisher noch nie gemacht habe wollte ich mal fragen, was man beachten sollte.

Meine ersten Versuche die Funktionen der DLL von einem C#-Wrapper nach Delphi zu portieren, endeten in einer Schutzverletzung.

Als Beispiel:

Aus dem C#-Wrapper:

Code:
[DllImport("DMX4ALL.dll")]
public static extern bool CheckPort(int port);

Die Funktion habe ich dann mal so in Delphi übernommen:

Delphi-Quellcode:
interface
  function CheckPort(port: Integer): Boolean; stdcall;

implementation
  function CheckPort(port: Integer): Boolean; stdcall; external 'DMX4ALL.DLL';
Kann mir mal bitte jemand einen Wink in die richtige Richtung geben?

Danke!

Luckie 6. Apr 2009 14:06

Re: Wie kann ich eine C++ DLL nutzen?
 
Wo willst du die DLL jetzt nutzen, in Delphi oder C#?

divBy0 6. Apr 2009 14:08

Re: Wie kann ich eine C++ DLL nutzen?
 
Sorry,

in Delphi will ich die nutzen. Für C# ist eine Wrapper-Klasse dabei.

hoika 6. Apr 2009 14:17

Re: Wie kann ich eine C++ DLL nutzen?
 
Halo,

Ist ja ne richtige c++ DLL, guck sn.

Bsp.-e

Auf der Seite nach DMX4ALL Delphi Sample suchen.


Heiko

divBy0 6. Apr 2009 14:49

Re: Wie kann ich eine C++ DLL nutzen?
 
Na toll, ich hatte beim Hersteller nachgefragt und laut denen gibt es keine Delphi-Version.

hoika 6. Apr 2009 14:51

Re: Wie kann ich eine C++ DLL nutzen?
 
Hallo,

also ich habe einfach mal in google was eingetippt ...


Heiko

divBy0 6. Apr 2009 15:02

Re: Wie kann ich eine C++ DLL nutzen?
 
Das mache ich normalerweiße auch, habe mich hierbei allerdings wirklich nur auf den Hersteller verlassen.

generic 6. Apr 2009 15:22

Re: Wie kann ich eine C++ DLL nutzen?
 
Div was hast du den für ein Projekt vor.

Den Lichttechnik ist auch eines meiner Lieblingsthemen.

http://www.quantendrehung.de/cms/ueb...echniker-jobs/

divBy0 6. Apr 2009 15:36

Re: Wie kann ich eine C++ DLL nutzen?
 
Das soll erst mal eine kleine Steuerung für eine LED-PAR-Matrix werden, vorgesehen sind 8x8 LED-PAR64.
Ist im Moment nur als Spielerei gedacht, ob das für den Bühneneinsatz taugt wird sich dann zeigen.

divBy0 12. Apr 2009 18:58

Re: Wie kann ich eine C++ DLL nutzen?
 
@hoika: Das Beispiel was du gefunden hattest ist leider schon älter und arbeitet mit einer anderen DLL.

Jetzt habe ich fast alle Funktionen der DLL in meiner Unit fertig. Allerdings habe ich eine Frage zu einem Record.

In der C-Header-Datei ist folgendes implementiert:

Code:
typedef struct structVersionInfoStruct
{
   char      InterfaceInfo[500];
   DWORD      HW_Version;
   DWORD      NrOfDmxData;
   BOOL      SignalOutput;
   BYTE      MergeMode;
   WORD      MergeStart;
   WORD      MergeStop;
} VERSION_INFO;

Meine Anpassung sieht so aus:

Delphi-Quellcode:
type TVersionInfo = record
  InterfaceInfo: Array[0..499] of Char;
  HW_Version:    DWORD;
  NrOfDmxData:   DWORD;
  SignalOutput:  Boolean;
  MergeMode:     Byte;
  MergeStart:    WORD;
  MergeStop:     WORD;
end;
Ist die Definition von InterfaceInfo als Array of Char so richtig?

DeddyH 12. Apr 2009 19:50

Re: Wie kann ich eine C++ DLL nutzen?
 
AFAIK ja, aber ich bin da auch kein Experte.

quendolineDD 12. Apr 2009 19:59

Re: Wie kann ich eine C++ DLL nutzen?
 
Zitat:

Ist die Definition von InterfaceInfo als Array of Char so richtig?
Ja.

Cyf 12. Apr 2009 21:49

Re: Wie kann ich eine C++ DLL nutzen?
 
Ich würde allerdings Bool bei Bool belassen, wobei das ziemlich egal sein sollte, aber wenn die Windowstypen schon benutzt werden und auch in Delphi verfügbar sind, warum sie ändern.
Einen Unterschied würde das nur machen, wenn jemande auf die Idee kommen würde, irgenwelche Werte in die Variable hineinzucasten.

Corpsman 13. Apr 2009 09:33

Re: Wie kann ich eine C++ DLL nutzen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hossa divBy0,

Vor langer zeit hab ich auch mla was gemacht zu DMX, hab das mal rausgegruschtelt.

Damals gabs DMX60, DMX120 und DMX1512 C

Bei mir gehts nicht mehr, weil ich ja diese DMX Karten nicht mehr hab. Evtl bei dir ?

Dann könnte ich dir die entsprechenden ansprech dinger geben...

quendolineDD 13. Apr 2009 10:56

Re: Wie kann ich eine C++ DLL nutzen?
 
Naja Bool und Boolean sind nicht gleich. Es besteht darin ein Unterschied.
Delphi-Quellcode:
var
  a : BOOL;
  b : Boolean;
begin
  a := BOOL(-1);
  ShowMessage(IntToStr(Ord(a)));
  b := BOOLEAN(-1);
  ShowMessage(IntToStr(Ord(b)));
end;
a bleibt -1 und b wird 1. Es ist einfach aus der Definition heraus. Bei C# ist es nun noch so, das es nur true und false gibt. In C# wird nicht davon ausgegangen, das false = 0 und true <> 0. ShowMessage(IntToStr(Ord(true))); ergibt 1.

Cyf 13. Apr 2009 11:05

Re: Wie kann ich eine C++ DLL nutzen?
 
Deswegen habe ich geschrieben, solange niemand auf die Idee kommt, da was reinzucasten. :wink:
In Abfragen wird <> 0 in Delphi immer als true interpretiert werden, Probleme könnte aber die geniale Überprüfung
Delphi-Quellcode:
aBool = true
bringen, weswegen man von so etwas (sinnlosem) auch absehen sollte.


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