Je veux convertir le système pour p> aide . p> p> System :: string ^ code> à
lpcwstr code>.
4 Réponses :
Vous devez utiliser p / invoke. Vérifiez ce lien: http://www.pinvoke.net/default.aspx/ kernel32 / windfirstfile.html
ajoutez simplement le et CLR sera géré au type natif Marshaling automatiquement. P> [modifier] strong> Je viens de réaliser que vous utilisez c ++ / cli. Dans ce cas, vous pouvez également utiliser implicite p / invoquer , qui est une caractéristique que seul C ++ prend en charge (opposé à C # et VB.NET). Ces articles affichent plusieurs exemples: P> Comment: convertir entre Divers types de chaînes en C ++ / CLI P> P> dllimport code> Signature de la fonction native: p>
Pour convertir un système :: String OT LPCWSTR en C ++ / CLI Vous pouvez utiliser le marshal :: stringtohglobalansi fonction Pour convertir des chaînes gérées en chaînes non exploitées.
System::String ^str = "Hello World"; IntPtr ptr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str); HANDLE hFind = FindFirstFile((LPCSTR)ptr.ToPointer(), data); System::Runtime::InteropServices::Marshal::FreeHGlobal(ptr);
Le moyen le plus simple de le faire en C ++ / CLI est d'utiliser PIN_PTR CODE>:
#include <vcclr.h>
void CallFindFirstFile(System::String^ s)
{
WIN32_FIND_DATA data;
pin_ptr<const wchar_t> wname = PtrToStringChars(s);
FindFirstFile(wname, &data);
}
Il convient de noter que le wwname code> indique les données de caractère réelles dans
s code>, pas une copie de ceux-ci, ce qui peut le rendre plus efficace que les autres solutions de maréchalation. (
const code> allusion à cela)
J'ai trouvé que ne fonctionne pas, le code de renvoi 87. Au lieu de cela, P> #include <atlstr.h>
CString s("C:\\my.dll");
::LoadLibraryEx((LPCWSTR)s, 0, flags);
m Utilisation de VC ++ .. vient de perdre la piste de code, donc .. Besoin de temps pour utiliser les réponses.