J'écris une DLL d'encapsulation dans C++ managé (/ clr) pour une DLL native avec Visual Studio 2008. Cette DLL d'encapsulation sera utilisée pour les langages de programmation .NET, comme C#.Opérateur de conversion explicite en C++ managé pour une DLL .NET
J'ai des problèmes avec ma mise en œuvre d'un opérateur explicite coulé à System :: String. La diffusion fonctionne dans un programme de test C++ géré, mais pas dans un programme de test C#.
C'est l'erreur que je reçois dans le programme C#:
error CS0030: Cannot convert type 'Field' to 'string'
Voici une version simplifiée de la façon dont je l'ai fait:
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());
}
};
L'objet natif met en œuvre la coulée de const char *, donc cela fonctionne. Je peux même l'utiliser dans un autre programme C++ géré. Cependant, il ne fonctionne pas en C#.
Voici comment la propriété est exposée dans l'Explorateur d'objets de VS2008:
Field.explicit operator string()
public explicit operator string()
Member of Field
Comment dois-je mettre en œuvre l'opérateur explicite coulé dans Managed C++ il est donc utilisable en C# ou tout autre langage .NET?
Votre code n'est pas un code C# –
@Saeed - non, il est C++/CLI, la langue que l'OP utilise. –
Merci, Hans! Votre suggestion fonctionne. –