【问题标题】:C# unsafe context / pointer type of LPWStrLPWStr 的 C# 不安全上下文/指针类型
【发布时间】:2023-04-06 19:54:01
【问题描述】:

假设我们有一个不安全的上下文,因为我想要一个指向从非托管 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 存储在类的其他位置? 谢谢, 于尔根

【问题讨论】:

  • 你试过使用 IntPtr 吗?这通常是我用来从 C++ 传递我不想弄乱的任何类型的指针,除非稍后将它们传递回 C++。

标签: c# pointers unsafe wchar-t


【解决方案1】:

除非你在构造字符串的过程中遇到 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

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2013-08-12
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多