将C#字符串转换为C字符*
我想将C#将C#字符串转换为C字符*,c#,c,string,type-conversion,C#,C,String,Type Conversion,我想将C#字符串转换为C字符*。问题是,我不能使用固定语句,因为它必须与默认C兼容,因为我在C中的所有字符串都是char* 我尝试过字节数组,但我只成功地将其转换为char[],byte[]等,但从未转换为char* 有人知道怎么做吗 我搜索了很多,没有发现任何有用的东西(大多数建议使用固定语句,这可能会使它与默认C不兼容…) 问题是,我的函数需要一个char*作为参数,因为该函数将在默认C中使用,char*是函数的返回结果。(基本上,您将指针作为参数传递,它将结果分配给该指针的地址。这是否如我
字符串
转换为C字符*
。问题是,我不能使用固定语句,因为它必须与默认C兼容,因为我在C中的所有字符串都是char*
我尝试过字节数组,但我只成功地将其转换为char[]
,byte[]
等,但从未转换为char*
有人知道怎么做吗
我搜索了很多,没有发现任何有用的东西(大多数建议使用固定语句,这可能会使它与默认C不兼容…)
问题是,我的函数需要一个
char*
作为参数,因为该函数将在默认C中使用,char*
是函数的返回结果。(基本上,您将指针作为参数传递,它将结果分配给该指针的地址。这是否如我所希望的那样有效?Marshal.StringToHGlobalAnsi
)。完成后别忘了调用Marshal.FreeHGlobal
。或者,如果您正在使用P/Invoke,请使用[marshallas(UnmanagedType.LPStr)]
您需要查看指针类型。看这篇MSDN文章:我并不完全了解COM和Pinvoke。。。我必须阅读它,因为它看起来非常重要,C是托管的,C++不是。因此,要将数据传递到C++ DLL中,必须将C语言数据移动到未管理的内存空间。因此,您需要转换为c#中的IntPtr对象,它是指向c#中任何数据类型的指针。因此,我需要通过手动分配在默认内存之外声明一个指针,然后我可以通过我的c DLL访问它?问题是,我用C声明变量,然后我只传递地址,我只想获取该地址并为其分配一个与C兼容的字符串。Marshal.StringToHGlobalAnsi
。完成后别忘了调用Marshal.FreeHGlobal
。或者,如果您正在使用P/Invoke,请使用[marshallas(UnmanagedType.LPStr)]
您需要查看指针类型。看这篇MSDN文章:我并不完全了解COM和Pinvoke。。。我必须阅读它,因为它看起来非常重要,C是托管的,C++不是。因此,要将数据传递到C++ DLL中,必须将C语言数据移动到未管理的内存空间。因此,您需要转换为c#中的IntPtr对象,它是指向c#中任何数据类型的指针。因此,我需要通过手动分配在默认内存之外声明一个指针,然后我可以通过我的c DLL访问它?问题是,我在C中声明变量,然后我只传递地址,我只想获取那个地址并给它分配一个与C兼容的字符串。