Je souhaite convertir System::String ^
en LPCWSTR
.'System :: String ^' à 'LPCWSTR'
pour
FindFirstFile(LPCWSTR,WIN32_FIND_DATA);
S'il vous plaît aider.
Je souhaite convertir System::String ^
en LPCWSTR
.'System :: String ^' à 'LPCWSTR'
pour
FindFirstFile(LPCWSTR,WIN32_FIND_DATA);
S'il vous plaît aider.
Vous devez utiliser P/Invoke. Vérifiez ce lien: http://www.pinvoke.net/default.aspx/kernel32/FindFirstFile.html
ajouter simplement la signature de la fonction native DllImport
:
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
static extern IntPtr FindFirstFile
(string lpFileName, out WIN32_FIND_DATA lpFindFileData);
et CLR ne réussi à type natif marshaling automatiquement.
[Éditer] Je viens de réaliser que vous utilisez C++/CLI. Dans ce cas, vous pouvez également utiliser implicit P/Invoke, qui est une fonctionnalité prise en charge uniquement par C++ (par opposition à C# et VB.NET). Cet article montre plusieurs exemples:
Pour convertir un système :: chaîne ot LPCWSTR en C++/CLI vous pouvez utiliser la fonction Marshal::StringToHGlobalAnsi pour convertir des chaînes en chaînes non gérés gérés.
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);
La meilleure façon de le faire en C++/CLI est d'utiliser pin_ptr
:
#include <vcclr.h>
void CallFindFirstFile(System::String^ s)
{
WIN32_FIND_DATA data;
pin_ptr<const wchar_t> wname = PtrToStringChars(s);
FindFirstFile(wname, &data);
}
J'ai trouvé que
String^ str = "C:\\my.dll";
::LoadLibraryEx(LPCWSTR)Marshal::StringToHGlobalAnsi(str).ToPointer(), 0, flags);
ne fonctionne pas, le code de retour 87. Au lieu de cela,
#include <atlstr.h>
CString s("C:\\my.dll");
::LoadLibraryEx((LPCWSTR)s, 0, flags);
a fonctionné comme un charme et semble être la méthode la moins verbeuse.
Quelle langue utilisez-vous? – heavyd
m en utilisant vC++ .. juste perdu le code de suivi, donc .. besoin de temps pour utiliser les réponses. – Rick2047