AGB  ·  Datenschutz  ·  Impressum  







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

std::basic_string class -> pascal

Ein Thema von DOCaCola · begonnen am 26. Mär 2007 · letzter Beitrag vom 27. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
DOCaCola

Registriert seit: 25. Mär 2007
12 Beiträge
 
#1

std::basic_string class -> pascal

  Alt 26. Mär 2007, 16:23
ich möchte diese funktion gern von meiner delphi dll aus aufrufen um im visual c++ 6.0 geschriebenen hauptprogramm eine meldung auszugeben.

Code:
void TextDisplayAdd(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)
es handelt sich eigentlich um einen string der hier übergeben wird. allerdings habe ich probleme den aufruf der prozedur nach pascal zu übersetzen, da es sich wohl um etwas kompilerspezifisches handelt. im internet konnte ich sonst leider nur sehr wenig dazu finden. vielleicht könnte mir ja jemand weiterhelfen der sich gut mit c++ auskennt.

gruß Norman
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: std::basic_string class -> pascal

  Alt 26. Mär 2007, 16:37
Willkommen bei der DP, aber ich glaube da hast du keine Chance. Wenn ich das recht sehe wird eine C++ Klasse uebergeben und die calling convention der Funktion ist wahrscheinlich __fastcall. Wie kriegst du eigentlich die Adresse der Funktion in die DLL?
  Mit Zitat antworten Zitat
DOCaCola

Registriert seit: 25. Mär 2007
12 Beiträge
 
#3

Re: std::basic_string class -> pascal

  Alt 26. Mär 2007, 16:40
danke. ja, stimmt, den pointer übergebe ich auch mit assembler
da wird es doch einen weg geben, oder?

gruß Norman
  Mit Zitat antworten Zitat
DMW

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

Re: std::basic_string class -> pascal

  Alt 26. Mär 2007, 17:22
Hallo,

wie Robert Marquardt schon feststellte, kannst du die Funktion aus Delphi nicht aufrufen, da du eine C++-Klasse übergeben müßtest, die sich vom Aufbau völlig von Delphi-Klassen unterscheidet. Zwar könnte man mit C++Builder auch aus Delphi verwendbare Klassen erstellen, doch macht das hier wenig Sinn, zumal da std::string nicht trivial ist und einige mit Delphi-Klassen nicht ohne weiteres mögliche Funktionalität implementiert - überdies ist es natürlich auch noch compilerabhängig.
Neben COM ist die einzige Möglichkeit, um zwischen mit verschiedenen Programmiersprachen/Compilern erstellten Programmteilen interagieren zu können, ein C-Interface. D.h., du müßtest eine Wrapperfunktion in C++ implementieren, die z.B. einen const char* anstatt eines const std::string& übernimmt. Auch muß die Wrapperfunktion als extern "C" deklariert sein, nicht aufgrund der Aufrufkonvention (die ist übrigens in C und C++ normalerweise __cdecl, __fastcall ist bei Delphi üblich), sondern damit der Name nicht dekoriert wird, was bei C++ zur Unterstützung der Funktionsüberladung üblich ist.

Beispiel:
Code:
// Wrapper:
extern "C" void portableTextDisplayAdd (const char* ptr)
{
    TextDisplayAdd (ptr);
}
Delphi-Quellcode:
// Aufruf:
portableTextDisplayAdd (PChar ('ein String'));
Wie du die Funktion in Delphi deklarierst, hängt davon ab, ob du sie aus einer DLL oder einem statisch hinzugelinkten Modul importierst. Da müssen dir die Delphi-Experten weiterhelfen.
Moritz
  Mit Zitat antworten Zitat
DOCaCola

Registriert seit: 25. Mär 2007
12 Beiträge
 
#5

Re: std::basic_string class -> pascal

  Alt 26. Mär 2007, 17:47
ja, eine wrapper dll habe ich mir auch schon überlegt, ich dachte nur ich finde hier im forum eine bessere möglichkeit dafür. es müsste ja auch reichen, wenn ich mir von der wrapper dll die klasse erstellen lasse und dann einfach via pointer die klasse an die applikation weitergebe, oder? ich möchte es soweit wie möglich modular halten, da mir sicher nochmal so eine klasse über den weg läuft.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: std::basic_string class -> pascal

  Alt 26. Mär 2007, 17:51
Wenn du modular beliebn willst, dann verwende nichts Compiler-spezifisches im Interface. Das heißt nur c-kompatibles, weder delphi noch c++-Erweiterungen des Visual-C-Compilers.
Markus Kinzler
  Mit Zitat antworten Zitat
DOCaCola

Registriert seit: 25. Mär 2007
12 Beiträge
 
#7

Re: std::basic_string class -> pascal

  Alt 26. Mär 2007, 18:05
für das was in der applikation verwendet wurde bin, ich leider nicht verantwortlich das ist da problem

gruß Norman
  Mit Zitat antworten Zitat
DOCaCola

Registriert seit: 25. Mär 2007
12 Beiträge
 
#8

Re: std::basic_string class -> pascal

  Alt 27. Mär 2007, 17:29
noch eine frage. hat jemand lust mir eine dll zu schreiben die eine funktion enthält, um einen einzigen globalen string mit einem pchar beschreiben und den pointer zu diesem string zurückgibt? leider habe ich weder ahnung noch zugang zu einem geeigneten c++ compiler.

gruß Norman
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: std::basic_string class -> pascal

  Alt 27. Mär 2007, 17:35
Hallo,

1. turbo c++ (5.5 ?) gibt es kostenlos bei Borland (ähem codegear).
2. Lust habe ich aber keine Zeit.


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: std::basic_string class -> pascal

  Alt 27. Mär 2007, 17:36
Welche Delphi-Version hast du?
Markus Kinzler
  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 19:45 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