C# 不安全类型 -> char*[] ,获取 char 数组上的指针

标签 c# arrays pointers pinvoke unsafe

有:

[DllImport("OpenAL32.dll")]
static extern void alcOpenDevice(char*[] devicename);

想要将名称发送给这个函数,就像这样:

char[] data = "Hello!".ToCharArray();
char*[] txt = &data;

但是出现错误:

  • cannot implicitly convert type char[] * to char * []

    (有趣的错误,因为 C# 编译器也拒绝在/unsafe 模式下定义 char[] * :))

  • Cannot take the address of, get the size of, or declare a pointer to a managed type (char[])

附言
char 什么时候变成托管的?这是一个结构,不是吗?

public struct Char : IComparable, IConvertible, IComparable<char>, IEquatable<char>

尽管编译器显示了有关声明指向托管类型 (char[]) 的指针的信息。我只能建议,当类型是数组时,CLR 可能会将其呈现为托管类型,但这听起来很疯狂。

最佳答案

alcOpenDevice 不采用 char*[]char**,它采用 char*,您应该将其指定为 字符串。它还返回一个句柄。

    [DllImport("OpenAL32.dll", CharSet = CharSet.Ansi)]
    static extern IntPtr alcOpenDevice(string devicename);

关于C# 不安全类型 -> char*[] ,获取 char 数组上的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14086502/

相关文章:

javascript - JQuery - 每里编号

c++ - 在递归 n-queen 程序中获取 C++ Segmentation Fault 错误

java - 如何将 Mat (OpenCV) 保存到数组

c++ - 使用派生类分配基类指针的内存

c - 为什么某些 C 字符串库函数(即 strtok)不接受尚未使用 malloc 分配的 char *?

c# - 如何获得Windows Phone 8键盘建议栏的高度?

c# - 优化 Parallel.For 的性能

c# - MonoTouch 自动代理网络凭据不起作用

c# - 将 XmlElement 从一个列表框拖动到另一个空的 Xml 绑定(bind)列表框

.net - 在 .NET 中使用 Hashtable 将指针映射到不可变对象(immutable对象)