Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C++ WideString aus C++ DLL-Methode an Delphi-Host zurückgeben!? (https://www.delphipraxis.net/137067-widestring-aus-c-dll-methode-delphi-host-zurueckgeben.html)

MacGyver2k 14. Jul 2009 20:04

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

MacGyver2k 14. Jul 2009 21:43

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:
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();
}
ich bin echt so langsam am verzweifeln :wall:

Apollonius 15. Jul 2009 17:15

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.

MacGyver2k 16. Jul 2009 00:33

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:
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;
}
LPWSTR entspricht dabei ja WCHAR*

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!

Apollonius 16. Jul 2009 12:32

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:
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); //!
}
Der Rückgabetyp der Funktion sollte void sein. Außerdem solltest du buffer wieder freigeben.

MacGyver2k 18. Jul 2009 16:28

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.
Seite 2 von 2     12   

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