![]() |
Re: WideString aus C++ DLL-Methode an Delphi-Host zurückgebe
Hi Leute,
schon mal vielen Dank für die zahlreiche Teilnahme an meinem Problem. Ich muss jetzt erstmal alle Posts durchlesen und dann handeln! Aber wie das so im Überfliegen aussieht, ist bestimmt geiles dabei! Ich melde mich später wieder! Grüße MacGyver2k |
Re: WideString aus C++ DLL-Methode an Delphi-Host zurückgebe
So nun hab ich alles gelesen und habe auch einiges davon ausprobiert. Leider funktioniert es immernoch nicht.
Zunächst muss ich leider sagen, dass die meisten Vorschläge auf Änderungen am Delphi Code hinauslaufen. Ich habe leider nicht extra erwähnt, dass ich den Delphi Code zwar habe, ihn aber nicht abändern kann. Würde wohl auch mit bestehenden Plugins ins Gehege kommen. Es geht auch wirklich ausschließlich daraum, wie ich den String aus C/C++ an Delphi zurückgebe. Denn Stringparameter von Delphi nach C kommen ohne probleme an. Ich hab nun mal alles möglich eingebaut, was nur irgendwie sinnvoll scheint. Dabei haben mich die Hinweise von himitsu am meisten inspiriert. Außerdem habe ich auch wie Apollonius schrieb, mal das mit dem versteckten Parameter probiert. Es kommt wie gesagt immernoch nichts raus.
Code:
ich bin echt so langsam am verzweifeln :wall:
DECLDIR LPCWSTR EXTP_GetPlugInName( LPCWSTR result )
{ LPWSTR buffer = NULL; int size = MultiByteToWideChar( CP_ACP, 0, "MyPluginName", -1, NULL, 0 ); buffer = (WCHAR*) malloc( sizeof( WCHAR ) * size ); MultiByteToWideChar( CP_ACP, 0, "MyPluginName", -1, buffer, size ); result = SysAllocStringLen( buffer, size ); return result; //return PlugIn.GetPlugInName(); } |
Re: WideString aus C++ DLL-Methode an Delphi-Host zurückgebe
Ich sprach von einem Zeiger auf einen LPWSTR. :wink: Ohne die zusätzliche Inidrektion kann kein Wert zurück übertragen werden.
|
Re: WideString aus C++ DLL-Methode an Delphi-Host zurückgebe
hi Apollonius,
danke für den Wink. Ich hab nun so wie ich es mir am plausibelsten denken konnte, das mit dem Zeiger auf LPWSTR probiert. So wie ich es hier implementiert habe, funktioniert es leider nach wie vor nicht :( habe ich immernoch einen logik-fehler bei der ganzen Sache?
Code:
LPWSTR entspricht dabei ja WCHAR*
DECLDIR LPWSTR* EXTP_GetPlugInName( WCHAR** result )
{ int size = MultiByteToWideChar( CP_ACP, 0, "MyPluginName", -1, NULL, 0 ); result = new WCHAR*; *result = new WCHAR[size]; MultiByteToWideChar( CP_ACP, 0, "MyPluginName", -1, *result, size ); return result; } Ich hoffe, dass ich wirklich noch irgendwo einen Hänger in meinem Kopf habe, den mir vieleicht irgendjemand aufzeigen kann. Weiterhin Danke alle Helfer - auch im Voraus! |
Re: WideString aus C++ DLL-Methode an Delphi-Host zurückgebe
Dein Code aus #12 war schon fast richtig. Die Zuweisung in der vorletzten Zeile wird nur nicht an den Aufrufer durchgereicht, daher sollte das so aussehen:
Code:
Der Rückgabetyp der Funktion sollte void sein. Außerdem solltest du buffer wieder freigeben.
DECLDIR void /*!*/ EXTP_GetPlugInName( LPCWSTR* /*!*/ result )
{ LPWSTR buffer = NULL; int size = MultiByteToWideChar( CP_ACP, 0, "MyPluginName", -1, NULL, 0 ); buffer = (WCHAR*) malloc( sizeof( WCHAR ) * size ); MultiByteToWideChar( CP_ACP, 0, "MyPluginName", -1, buffer, size ); *result /*!*/ = SysAllocStringLen( buffer, size ); free(buffer); //! } |
Re: WideString aus C++ DLL-Methode an Delphi-Host zurückgebe
Hi Apollonius,
ich krieg nen Knall - es geht!!! Du hast mir damit wirklich extremst geholfen! :cheers: Das ganze öffnet mir nun den Weg, um über C++/CLI eine Bräsche zu .NET Code zu schlagen, und in meinen Plugins .NET Code einzusetzen. Nochmals vielen Dank an Apollonius und natürlich auch alle anderen die hier ihre Zeit geopfert haben! THX! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:52 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