AGB  ·  Datenschutz  ·  Impressum  







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

C++ Delphi arrays

Ein Thema von Tim Henford · begonnen am 20. Jun 2007 · letzter Beitrag vom 20. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#1

C++ Delphi arrays

  Alt 20. Jun 2007, 11:06
Hallo,

ich habe eine C++ DLL, die folgendendermaßen aufgebaut ist:
Code:
extern "C" short EXPORT test (double *x)
{
MessageBox (GetActiveWindow(), _fcvt(x[0], 2, &dec, &sign), "DLLTEST",MB_OK|MB_ICONINFORMATION);
}
In Delphi möcht ich nun die Funktion aufrufen und die Parameter übereben:

Delphi-Quellcode:
type
  TExte = array of Extended;

type
  TTest = function (x: TExte): Smallint; stdcall;


var
  vekX : TExte;
begin
  dll:= LoadLibrary('test.dll');
  @test := GetProcAddress(dll,'test');
  SetLength(vekX,1);
  vekX[0]:= 5;
  r:=test(vekX);
end;

Das klappt aber nicht, denn die MsgBox zeigt nichts an-was mach ich da falsch?

Danke Tim
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 11:08
Bitte packe erstmal [ Delphi ] - Tags um Deinen Code. Das macht den ungemein lesbarer.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

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

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 11:14
Versuch mal

  r:=test(@vekX[0]);
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 11:33
Ziemlich falsch. Erstens ist double = Double, zweitens ist die Delphi-Deklaration der Funktion falsch.
Delphi-Quellcode:
type
  PDouble = ^Double;

type
  TTest = function(x: PDouble): Smallint; stdcall;

var
  vekX: array of Double;
begin
  dll := LoadLibrary('test.dll');
  @test := GetProcAddress(dll, 'test');
  SetLength(vekX, 1);
  vekX[0] := 5;
  r := test(@vekX[0]);
end;
So sollte es gehen.

Willst du nicht ein array von Double-Werten handhaben, sondern nur genau einen Double-Wert, dann besser mit var arbeiten.
Delphi-Quellcode:
type
  TTest = function(var x: Double): Smallint; stdcall;

var
  vekX: Double;
begin
  dll := LoadLibrary('test.dll');
  @test := GetProcAddress(dll, 'test');
  vekX := 5;
  r := test(vekX);
end;
Auf C-Seite pruef mal nach ob EXPORT wirklich zu stdcall aufgeloest wird. Das sollte nicht nur in den Projektoptionen gesetzt sein.
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#5

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 16:38
Super! Danke das funktioniert schonmal soweit

Wie würde es denn gehen das gesamte array zuübergeben?
r := test(@vekX); Scheint da nicht zu funktionieren?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 16:39
du verstehst den Quelltext nicht? Richtig? Es wird zur zeit die Adrese übergeben wo der Speicherbereich des Arrays beginnt. Es wird also nicht ein einzelnes Array-Element übergeben sondern die Adresse des gesamten Arrays (welche gleichzeitig die Adresse des ersten elementes ist)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 16:43
Damit das richtig funktioniert muss natuerlich auch noch die Anzahl Elemente im array mit uebergeben werden. Dazu braucht man natuerlich einen zweiten Parameter.
  Mit Zitat antworten Zitat
Tim Henford

Registriert seit: 14. Sep 2006
169 Beiträge
 
#8

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 16:48
Ja leider hab ich beim Arbeiten mit Arrays und Pointern noch ein kleines Verständnisproblem.


Ja, also die Adresse des Speicherbereichs, an dem das Array beginnt wird mittels
Delphi-Quellcode:
vekX[0]:=5; vekX[1]:=7;
r:= test(@vekX, 2);
übergeben.

Nun dacht ich mit C++ via
Code:
short Test (double *x,int anz))
{
MessageBox (GetActiveWindow(), _fcvt(x[1],... //==7
}
wieder daraufzugreifen zu können?

Danke

[edit=SirThornberry]C-Code-Tags gesetzt - Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 17:00
du übergibst doch nur einen Pointer auf einen Double. Du musst also den Pointer weiter rücken. Hier ein Beispiel
Code:
void DoAnything2(float* Data)
{
  for (int i = 0; i <= 10; i++)
  {
    *Data = i * 2; //i * 2 dem Arrayelement zuweisen
    Data = Data + sizeof(Data); //zum nächsten Arrayelement weiter rücken
  }
}
Es wird ein Pointer auf ein Array of float übergeben. In Der Schleife wird dann in den Float was geschrieben und Data wird auf das nächste Element des Arrays weiter gerückt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: C++ Delphi arrays

  Alt 20. Jun 2007, 17:19
Zitat:
Code:
Data = Data + sizeof(Data);
Meiner Meinung nach eher
Code:
Data = Data + sizeof(*Data);
Ich will das ganze doch um die Größe des Inhalts weiterrücken. Oder?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:06 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