C# 不安全上下文/LPWStr 的指针类型

发布于 2024-12-06 08:54:45 字数 370 浏览 0 评论 0原文

假设我们有一个不安全的上下文,因为我想要一个指向从非托管 C++ 代码传递的 wchar_t 参数的指针。例如:

unsafe public(int* A, ???* B)
{
    _myInt = A;
    _myString = B;
}

int 参数一切都很好,但是 ???* 类型呢? 我知道要将此方法将 wchar_t 编组为 C# 字符串类型,可以在参数 B 之前写入 [MarshalAs(UnmanagedType.LPWStr)]。 但我需要 B 的某种本机指针类型,以便将此指针链接到 _myString 字段。 C# 中是否有类似 wchar_t 的东西,或者我还能做些什么来将指针 B 存储在类中的其他位置? 谢谢, 于尔根

suppose we have an unsafe context, because I want to have a pointer to a wchar_t parameter which is passed from a unmanaged C++ code. For example:

unsafe public(int* A, ???* B)
{
    _myInt = A;
    _myString = B;
}

Everything is fine with the int parameter, but what about the ???* type?
I know that to marshal a wchar_t to a C# string type for this method, one can write [MarshalAs(UnmanagedType.LPWStr)] before the parameter B.
But I need some kind of a native pointer type for B in order to link this pointer to _myString field.
Is there something like wchar_t in C# or what else can I do to have the pointer B stored elsewhere in the class?
Thanks,
Jurgen

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮光之海 2024-12-13 08:54:45

除非您在构造字符串期间在 C# 复制指针后面的字符串时遇到问题...您可以像这样完成它:

public static unsafe int Strlen(char* start)
{
  var eos = start;

  while (*(eos++) != 0);
  return (int) ((eos - start) - 1);
}

unsafe public(int* A, char* B)
{
    _myInt = A;

    _myString = new String(B, 0, Strlen(B));
}

此处使用的构造函数记录在 MSDN

Unless you have a problem with c# copying the string behind the pointer during the construction of a string... you can pull it off like this:

public static unsafe int Strlen(char* start)
{
  var eos = start;

  while (*(eos++) != 0);
  return (int) ((eos - start) - 1);
}

unsafe public(int* A, char* B)
{
    _myInt = A;

    _myString = new String(B, 0, Strlen(B));
}

The constructor used here is documented in MSDN

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文