AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) C++ WideString aus C++ DLL-Methode an Delphi-Host zurückgeben!?
Thema durchsuchen
Ansicht
Themen-Optionen

WideString aus C++ DLL-Methode an Delphi-Host zurückgeben!?

Ein Thema von MacGyver2k · begonnen am 13. Jul 2009 · letzter Beitrag vom 18. Jul 2009
 
MacGyver2k

Registriert seit: 21. Mär 2009
5 Beiträge
 
#1

WideString aus C++ DLL-Methode an Delphi-Host zurückgeben!?

  Alt 13. Jul 2009, 20:40
Hallo Leute,

ich habe ein Problem beim Rückgabetyp "WideString" aus einer C bzw. C++ DLL heraus.
Es besteht eine Delphi-Infrastruktur für Plugins, welche allerdings bisher ausschließlich auch mit Delphi-DLLs genutzt wurde.
Nun hab ich vor diese auch mit C/C++-DLLs zu füttern.
Geht so weit auch schonmal bei DLL-Methoden mit numerischen Rückgabe-Typen wie Integer und Bool und so weiter.
Bsp (C++):

Delphi-Quellcode:
bool DECLDIR EXTP_IsPlugIn( LPWSTR name )
{      
    return PlugIn.IsPlugIn( name );   
}
Sobal die in Delphi vorliegende Hostanwendung meine DLL lädt und die eben geschriebene Methode aufruft, geht das alles wunderbar so wie es sein soll.
Im Parameter "name" steht entsprechend die erwartete GUID als String - das konnte ich mit dem VS-Debugger prüfen.
Da ich nun hier und da schon gelesen habe, dass ein Delphi-WideString in C äquivalent mit einem LPWSTR ist, habe ich den Parametertyp auch so gewählt.
Das heißt, in diese Richtung funktioniert die Übergabe. Außerdem Kommt auch das BOOL-True in der Hostanwendung an, da die innere Methode bislang immer True zurückliefert.
Wenn ich nun aber eine Methode habe, die nach Anforderung im Delphi-Code einen WideString zurückliefern muss, so kommt absolut garnichts an - zum mindest sieht es aus wie ein leerer Sting "".
Hier mal noch eine Methode, die einen WideString zurückliefern soll (C++):

Delphi-Quellcode:
LPWSTR DECLDIR EXTP_GetPlugInDescription()
{
    return PlugIn.GetPlugInDescription();
}
Wie dem Code zu entnehmen ist, habe ich hier auch schon den Typ auf LPWSTR gesetzt. DECLDIR entsteht folgendermaßen (C++):
#define DECLDIR __declspec(dllexport) Nun stellt sich mir die Frage, wie ich wohl einen String aus C/C++ in eine für Delphi akzeptable WideString-Konforme Variante überführe.
Hier nochmal die Deklaration der entsprechenden DLL-Methode in Delphi:

GetPlugInName = function : WideString; stdcall; Ich würde mich tierisch freuen, wenn jemand hier einen Wink für mich hätte. Sonst muss ich mich nur weiterhin aufregen, dass der Entwickler dieser Pluginverwaltung unbedingt WideStrings nutzen muss, wo ich doch gelesen habe, dass man die grade in DLLs nicht unbedingt nehmen soll, sondern eher PChar, um eben solchen Problemen aus dem Weg zu gehen.

Vielen Dank an euch schonmal!!!
Grüße, MacGyver2k
  Mit Zitat antworten Zitat
 


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