die Suche nach Hilfe von Erfahrung Menschen weitergeben, die mit C behandelt haben ++ und C#Wie C++ Objekt zu C#
ich jetzt einen C# -Projekt zu schreiben, die eine vorhandene C++ Funktion in der internen Bibliothek erfordert Aufruf, und einige Schwierigkeiten stoßen .
C++ Code Funktion Kopf
typedef int (*PTR_func)
(const char* param1, // input
const char* param2, // input
VirtualInternalString& po_output); // Third param is actually the output
C++ Code-Klasse (änderbar nicht)
namespace InternalLib
{
class VirtualInternalString
{
public :
virtual ~VirtualInternalString(){};
virtual void _cdecl SetString(const char *) =0;
virtual const char * _cdecl c_str() const =0;
};
class SafeInternalString :public VirtualInternalString
{
public :
SafeInternalString():TheString(""){};
virtual ~SafeInternalString(){};
virtual void _cdecl SetString(const char * chararray) { TheString = chararray;};
virtual const char * _cdecl c_str() const { return TheString.c_str() ;} ; // This is the std::string
protected:
std::string TheString;
};
class SafePtrString :public VirtualInternalString
{
public :
SafePtrString():PtrString(0){};
SafePtrString(std::string &str):PtrString(&str){};
virtual ~SafePtrString(){};
virtual void _cdecl SetString(const char * chararray) { (* PtrString) = chararray;};
virtual const char * _cdecl c_str() const { return PtrString->c_str() ;} ;
protected :
std::string * PtrString;
};
}
Nun ist diese zu nutzen, ich habe für das interne String-Objekt (kann nicht geändert werden) "func" in meinem C# -Code. Ich kann die C++ - Funktion richtig aufrufen und verwenden, aber während der Rückgabe der Ausgabe (der dritte Parameter) tritt ein Problem auf. Es sollte ein problembezogener Rückgabetyp sein.
C# (kann geändert werden)
[DllImport("xxxxlib", CallingConvention = CallingConvention.Cdecl)]
private extern static int func(string param1,
string param2,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder res); // problem here
Ich weiß, ich habe eine entsprechende Wrapper erstellen, den C++ decopose in C# String-Objekt, aber ich habe keine Erfahrung darüber. Ich habe mehrere Lösungen aus dem Internet versucht, aber nicht funktioniert.
Weiß jemand, wie ich das umsetzen kann? Würde es Ihnen etwas ausmachen, mir einen einfachen C# -Skelett-Code zu zeigen?
Habe ich vor ein paar Minuten nicht genau diese Frage gesehen? Hast du es gepostet und dann gelöscht? Wenn ja, dann bitte nicht. Stattdessen sollten Sie die Frage bearbeiten, die Sie bereits haben. –
Mögliches Duplikat von [Übergabe von Zeichenfolgen von C# nach C++ dll und zurück - minimales Beispiel] (https: // stackoverflow.com/questions/20752001/passing-strings-von-c-sharp-zu-c-dll-and-back-minimal-beispiel) – vasek
Sorry, dass ... Haben Sie eine Idee zu diesem Beitrag? Das Ziel besteht darin, die Zeichenfolge innerhalb des zurückgegebenen C++ - Objekts abzurufen. Es sollte nicht schwierig sein, aber ich habe es wirklich anders versucht und viel gekämpft. Es funktioniert immer noch nicht – passenger