Ich schreibe eine Wrapper-DLL in verwaltetem C++ (/ clr) für eine native DLL mit Visual Studio 2008. Diese Wrapper-DLL wird für .NET-Programmiersprachen verwendet. wie C#.Expliziter Umwandlungsoperator in verwaltetem C++ für eine .NET-DLL
Ich habe Probleme mit meiner Implementierung eines expliziten Cast-Operator zu System :: String. Casting funktioniert in einem verwalteten C++ - Testprogramm, jedoch nicht in einem C# -Testprogramm.
Dies ist der Fehler, den ich in der C# Programm zu erhalten:
error CS0030: Cannot convert type 'Field' to 'string'
Hier ist eine vereinfachte Version, wie ich es getan habe:
public ref class Field
{
private:
FieldNative* nativeObj;
public:
Field()
{
nativeObj = new FieldNative();
}
~Field()
{
delete nativeObj;
}
explicit operator System::String^(void)
{
const char* value = (const char*) *nativeObj;
return gcnew System::String(value, 0, nativeObj->size());
}
};
Das native Objekt das Gießen zu const char implementiert *, so funktioniert das. Ich kann es sogar in einem anderen verwalteten C++ - Programm verwenden. Es funktioniert jedoch nicht in C#.
Dies ist, wie die Eigenschaft im Objektbrowser von VS2008 ausgesetzt:
Field.explicit operator string()
public explicit operator string()
Member of Field
Wie muß ich den expliziten Cast-Operator in Managed C implementieren ++, so dass es in C# oder einer anderen .NET-Sprache verwendbar ist?
Ihr Code keine C# -Code ist –
@Saeed - nein, ist es C++/CLI, die Sprache, dass der OP verwendet. –
Danke, Hans! Dein Vorschlag funktioniert. –