J'agite une méthode en C++ qui reçoit un paramètre de type LPCOLESTR. J'accède à cette méthode par C#, mais je ne peux pas faire la conversion correcte entre String et ce type.Convertir une chaîne managée (C#) en LPCOLESTR (C++)
Disons que la méthode signinature en C++ est:
void Something(LPCOLESTR str)
En C#, je suis en train de l'appeler (toutes les questions de référence pour accéder à la méthode par une DLL ont déjà été résolu):
String test = "Hello world";
Something(test);
Mais sans chance, bien sûr. Si quelqu'un peut m'aider, je serais très heureux. Je vous remercie!
Extrait de code:
À titre d'exemple, voici mon C++ portion de code, défini dans le fichier MixedCodeCpp.h (CLR Class Library)
#include "windows.h"
#pragma once
using namespace System;
namespace MixedCodeCpp
{
public ref class MyClass
{
public:
HRESULT Something(LPCOLESTR str)
{
return S_OK;
}
};
}
Et voici mon code en C# (J'ai ajouté une référence au projet C++ dans le projet C#, via Visual Studio):
StringBuilder sb = new StringBuilder();
sb.Append("Hello world");
MixedCodeCpp.MyClass cls = new MixedCodeCpp.MyClass();
cls.Something(sb);
Avez-vous besoin d'utiliser LPCOLESTR pour le type d'argument? Peut-être qu'un type de chaîne plus vanille permettra la conversion? –
C'est très facile si j'utilise un type d'argument "String ^" ... mais il faudra que je le convertisse en LPCOLESTR à un moment donné, et je ne peux pas le faire non plus. J'ai ri du "type plus vanille", lol! : D –