C# 从System.String转换为PCTSTR

C# 从System.String转换为PCTSTR,c#,visual-studio-2005,C#,Visual Studio 2005,我必须将System.String(C#)转换为PCTSTR,它将被键入为_nullconstchar* 到目前为止,我找不到任何东西可以确切地告诉我如何做到这一点 有很多例子可以从System::String(C++/CLI)转换,但是我在System.String(C#)上找不到任何东西 我在Visual Studio 2005中工作。您应该使用封送静态类 var str = "Hello world" var marshalledStr = Marshal.StringToHGlobal

我必须将System.String(C#)转换为PCTSTR,它将被键入为_nullconstchar*

到目前为止,我找不到任何东西可以确切地告诉我如何做到这一点

有很多例子可以从System::String(C++/CLI)转换,但是我在System.String(C#)上找不到任何东西


我在Visual Studio 2005中工作。

您应该使用封送静态类

var str = "Hello world" 
var marshalledStr = Marshal.StringToHGlobalUni(str).ToPointer()

PCTSTR
const char*
的类型定义时,请参阅编组的完整参考


PCTSTR
const wchar\u t*
的类型定义时,使用


在这两种情况下,完成后调用释放内存;尽管您使用C#,但所讨论的内存分配是非托管的,因此不符合垃圾收集的条件,如果不正确清理它,将泄漏。

如果您想在PInvoke调用中使用它,您只需将参数声明为
string
,并使用
MarshalAs(UnmanagedType.LPStr)


如果你明确地想要一个C++的答案而不是C++ +CLI的答案,为什么你要标记这个代码> C++ +CLI ?不是String。String和Strase::字符串是同一个东西?C++/CLI很容易,因为C++/CLI支持本机C++数据类型。我相信你的第一步是在C++中找到<代码> char []/COD>。这是非常接近;你需要担心的是字符集。你为什么需要PCSTR?您是否需要PInvoke一些将其作为参数的函数?我需要使用Ansi,因为目标将使用ASCII。@Xaade:好的,很公平。:-]但对于您的启发,如果期望的总是ASCII,那么这就是一个
PCSTR
,不定义< >代码> PCTSTR < /代码>——根据代码是否>代码> Unicode < /Code >,定义了在<代码> PCSTR 和 PCWSTR 之间的变化。如果创建本机C++ DLL的人使用了方法来代替GODAWWORD结构,那么这将是很好的。需要人工编组。如果你的问题显示了你实际需要传递的信息,这会有所帮助,因为我的答案可能是考虑到你的实际情况可能最糟糕的方法。
[DllImport("somelib.dll")]
static extern void function([MarshalAs(UnmanagedType.LPStr)] string s);