AGB  ·  Datenschutz  ·  Impressum  







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

C++ DLL aufrauf nach Delphi übersetzten

Ein Thema von ueding · begonnen am 14. Sep 2006 · letzter Beitrag vom 15. Sep 2006
Antwort Antwort
ueding

Registriert seit: 21. Aug 2005
30 Beiträge
 
Delphi 10.4 Sydney
 
#1

C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 14:39
Hallo

ich muss ein C++ DLL in Delpi einbinden, habe aber leider ein paar Probleme damit
hier der c++ DLL Aufruf
_DECL int __stdcall ListAllNames(char* NamenListe, int nBufferSize); wie muss die declaration aussehen und
wie gestallte ich den Aufruf der DLL in Delphi.

besten Dank


Gregor
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 14:50
function ListAllNames(NamenListe: Pchar; nBufferSize: Integer): Integer; stdcall; external 'DLLNamename 'ListAllNames'
Markus Kinzler
  Mit Zitat antworten Zitat
ueding

Registriert seit: 21. Aug 2005
30 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 15:08
Danke erstmal

stellt sich die zweite Frage wie rufe ich die Function auf
habe mir das so vorgestellt, geht aber leider nicht

Delphi-Quellcode:
procedure EINLESEN.Button5Click(Sender: TObject);
var
p : pchar;
i : integer;


s : String;

begin
i := 0;
p := @s;
ListAllNames (p,i) ;

end;
wo mache ich den Fehler

danke
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#4

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 15:18
Code:
procedure EINLESEN.Button5Click(Sender: TObject);
var
i : integer;
s : String;
begin
  i := 0;
  ListAllNames(PChar(s),i);
end;
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
ueding

Registriert seit: 21. Aug 2005
30 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 15:29
funktioniert leider nicht,
wenn ich das so mache dann bekomme ich die Fehlermeldumg
[Fehler] EINLESEN.pas(107): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden die DLL soll mir eine liste zurück geben, und in nBufferzise soll die anzahl der zurück gegebenen zeichen stehen.

Gregor
  Mit Zitat antworten Zitat
_rEdoX

Registriert seit: 2. Jun 2006
Ort: Bochum
24 Beiträge
 
Delphi 7 Professional
 
#6

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 15:37
Delphi-Quellcode:
var
i : integer;
pc : PChar;
begin
  i := 12345;
  ListAllNames(pc,i);
end;
so sollte es eigentlich rennen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 15:39
Versuch mal
Delphi-Quellcode:
ListAllNames (p,i);
s := p;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 15:44
Zitat von ueding:
funktioniert leider nicht,
wenn ich das so mache dann bekomme ich die Fehlermeldumg
[Fehler] EINLESEN.pas(107): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden die DLL soll mir eine liste zurück geben, und in nBufferzise soll die anzahl der zurück gegebenen zeichen stehen.

Gregor
in nBuffersize wirst du niemals die anzahl der zurück gegebenen Zeischen finden da nBuffersize nicht als Var-Parameter übergeben wird und somit auch nicht von der DLL geändert werden kann.
So wie die Funktion aussieht übergist du als ersten Parameter den Buffer (der Speicher sollte schon reserviert sein) und nBufferSize gibt an wie groß der Buffer ist (wieviel Speicher du reserviert hast). Der Rückgabewert der Funktion gibt an wieviel Speicher gebraucht wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
ueding

Registriert seit: 21. Aug 2005
30 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 14. Sep 2006, 19:55
Hallo
habe noch ein wenig geforscht
die DLL gibt bei NamenListe eine Liste von Null-terminierten Strings.
Buffersize gibt wie viel Speicher ich bereit gestellt habe.
Rückgabebewert der Function ist die Anzahl der tatsächlich benötigten Bytes.

Habe nachstehenden Code ausprobiert geht aber auch nicht.
Delphi-Quellcode:
procedure EINLESEN.Button5Click(Sender: TObject);
var
NameIntern : array [0..15] of Char;
i : integer;
P : PCHAR;
s : String;
anzahl : integer;



begin
p := nil;

i := 16;
p :=@nameintern;


anzahl := ListAllNames ( p,i) ;

end;
wenn noch mal jemend helfen könnte ?

Danke

Gregor
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: C++ DLL aufrauf nach Delphi übersetzten

  Alt 15. Sep 2006, 11:28
Zitat von ueding:
Hallo
die DLL gibt bei NamenListe eine Liste von Null-terminierten Strings.
Buffersize gibt wie viel Speicher ich bereit gestellt habe.
Rückgabebewert der Function ist die Anzahl der tatsächlich benötigten Bytes.
Dann nutz dass doch einfach schon mal aus:
Delphi-Quellcode:
procedure EINLESEN.Button5Click(Sender: TObject);
var
nameList : Array of Char;
size : integer;
begin
  // benötigte Größe ermitteln
  size := ListAllNames(nil, 0);

  // array anlegen
  setLength(nameList, size);
  listAllNames(@nameList[0], size);
  
  ...
end;
Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:20 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