AGB  ·  Datenschutz  ·  Impressum  







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

C++ DLL in Delphi einbinden

Ein Thema von Andru · begonnen am 12. Feb 2007 · letzter Beitrag vom 15. Feb 2007
Antwort Antwort
Seite 3 von 3     123   
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#21

Re: C++ DLL in Delphi einbinden

  Alt 14. Feb 2007, 19:07
Zitat von OregonGhost:
Ist es garantiert, dass ein enum in C++ 4 Byte groß ist?
Wie die Standard-Spezifikation das sieht, ist mir nicht bekannt, aber z.B. der BCC macht enums per Default immer so klein wie möglich (mit der Compileroption -b läßt sich aber Integergröße erzwingen). Daher ist hier auch in C++ etwas Mißtrauen angebracht.
Moritz
  Mit Zitat antworten Zitat
Andru

Registriert seit: 1. Feb 2006
Ort: Salzgitter
24 Beiträge
 
Delphi 6 Enterprise
 
#22

Re: C++ DLL in Delphi einbinden

  Alt 15. Feb 2007, 10:08
Hab nochmals ne abschließende Frage.
Habe soweit alle Funktionen nun umsetzen können, allerdings fehlt mir noch eine.
Sie ist zwar nicht wirklich wichtig, allerdings würd ich schon gern wissen, was ich
dort falsch machen.
Bzw. möcht ich gern den richtigen Umgang mit Pointern lernen.

Um die Version des Treibers zu erfahren gibt es folgende Funktion:
Code:

Prototype eResult GetLibraryVersion( char* pLibVersion,
char* pInterfaceVersion );

pLibVersion:
Pointer to a character buffer which receives
the lib version (max. size 12).

pInterfaceVersion:
Pointer to a character buffer which receives
the interface version (max. size
12)

Return Result value as defined in eResult enumeration type.
Nach Unmengen von Umstellungen und Versuchen ist das mein momentaner Stand,
der ja allerdings nicht funktioniert...

Definition der Procedure
Delphi-Quellcode:
function GetLibraryVersion(pLibVersion: Pointer;
         pInterfaceVersion: Pointer): Integer; cdecl; external 'lib\PlayerLib.dll';


Die Imlementierung stell ich mir so vor:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
eResult: Integer;
LibVersion, InterfaceVersion: PChar;

pLibVersion, pInterfaceVersion: ^PChar;

sLibVersion, sInterfaceVersion: String;

begin
  LibVersion := '0';
  InterfaceVersion := '0';
  pLibVersion := @LibVersion;
  pInterfaceVersion := @InterfaceVersion;

  eResult := GetLibraryVersion(pLibVersion, pInterfaceVersion);

  LibVersion := @pLibVersion;
  InterfaceVersion := @pInterfaceVersion;

  sLibVersion := LibVersion;
  sInterfaceVersion := InterfaceVersion;
  Label3.Caption := sLibVersion + ' / ' + sInterfaceVersion + ' / ' + IntToStr(eResult);

end;

Fehler ist natürlich eine Zugriffsverletzung beim Lesen.
Dabei wird auch das CPU-Fenster aufgepoppt, wobei mir die Anweisung dort (nennt man das Assembler??)
natürlich noch viel weniger sagen, als der Rest.

Würd mich freuen, wenn Ihr mir heir nochmals zur Hand gehen könntet!

Wird wohl wieder ein Fehler bei der Konvertierung sein, oder?


Ich danke Euch!

Gruß,

Andru
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#23

Re: C++ DLL in Delphi einbinden

  Alt 15. Feb 2007, 10:26
Der Fehler liegt darin das Puffer gebraucht werden. Solche mit mindestens 12 Chars.
Delphi-Quellcode:
function GetLibraryVersion(pLibVersion: PChar;
         pInterfaceVersion: PChar): Integer; cdecl; external 'lib\PlayerLib.dll';

procedure TForm1.Button2Click(Sender: TObject);
var
  eResult: Integer;
  // ein Zeichen mehr zur Sicherheit kann nicht schaden
  LibVersion, InterfaceVersion: array [0..12] of Char;
begin
  // leere C Strings bestehen aus einem 0-Byte nicht der Ziffer '0'
  LibVersion[0] := #0;
  InterfaceVersion[0] := #0;

  eResult := GetLibraryVersion(LibVersion, InterfaceVersion);

  Label3.Caption := LibVersion + ' / ' + InterfaceVersion + ' / ' + IntToStr(eResult);
end;
  Mit Zitat antworten Zitat
Andru

Registriert seit: 1. Feb 2006
Ort: Salzgitter
24 Beiträge
 
Delphi 6 Enterprise
 
#24

Re: C++ DLL in Delphi einbinden

  Alt 15. Feb 2007, 11:36
Ja - spitze!

Wie erwartet klappt das reibungslos!
Muss Dir echt nomma ganz großen Dank aussprechen!

Ohne Dich wär ich hier wirklich verzweifelt!


Merci!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 16:15 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