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

时间:2012-12-29 22:32:21

标签: c# arrays pointers pinvoke unsafe

有:

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

想把这个名字发送给这个函数,就像smth那样:

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

但是得到错误:

  •   

    无法将char[] *类型隐式转换为char * []

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

  •   

    不能获取地址,获取大小或声明指向托管类型的指针   (char[]

PS
char什么时候被管理?这是一个结构,不是吗?

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

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

1 个答案:

答案 0 :(得分:6)

alcOpenDevice不接受char*[]char**,需要char*,您应将其指定为string。它还返回一个句柄。

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