首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“‘System::String^”到“LPCWSTR”

“‘System::String^”到“LPCWSTR”
EN

Stack Overflow用户
提问于 2009-06-30 10:35:24
回答 4查看 20.8K关注 0票数 10

我想要将System::String ^转换为LPCWSTR

代码语言:javascript
复制
FindFirstFile(LPCWSTR,WIN32_FIND_DATA); 

请帮帮忙。

EN

回答 4

Stack Overflow用户

发布于 2009-06-30 11:25:20

在C++/CLI中执行此操作的最简单方法是使用pin_ptr

代码语言:javascript
复制
#include <vcclr.h>

void CallFindFirstFile(System::String^ s)
{
    WIN32_FIND_DATA data;
    pin_ptr<const wchar_t> wname = PtrToStringChars(s);
    FindFirstFile(wname, &data);
}
票数 25
EN

Stack Overflow用户

发布于 2009-06-30 10:56:36

要在C++/CLI中转换System::String ot LPCWSTR,您可以使用Marshal::StringToHGlobalAnsi函数将托管字符串转换为非托管字符串。

代码语言:javascript
复制
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);
票数 11
EN

Stack Overflow用户

发布于 2009-06-30 10:48:52

您需要使用P/Invoke。请查看此链接:http://www.pinvoke.net/default.aspx/kernel32/FindFirstFile.html

只需添加DllImport本机函数签名:

代码语言:javascript
复制
 [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
 static extern IntPtr FindFirstFile
     (string lpFileName, out WIN32_FIND_DATA lpFindFileData);

CLR将自动执行托管到本机类型的封送处理。

编辑我刚知道你在用C++/CLI.在这种情况下,您还可以使用implicit P/Invoke,这是一个只有C++支持的特性(与C#和VB.NET相对)。本文展示了几个示例:

How to: Convert Between Various String Types in C++/CLI

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1062962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档