C#unsafe type - > char*[],在char数组上获取指针

Sec*_*ret 1 c# arrays pinvoke pointers unsafe

有:

[DllImport("OpenAL32.dll")]
static extern void alcOpenDevice(char*[] devicename);
Run Code Online (Sandbox Code Playgroud)

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

char[] data = "Hello!".ToCharArray();
char*[] txt = &data;
Run Code Online (Sandbox Code Playgroud)

但得到错误:

  • 无法隐式转换char[] *char * []

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

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

PS
何时char成为管理?这是一个结构,不是吗?

public struct Char : IComparable, IConvertible, IComparable<char>, IEquatable<char>
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*sky 6

alcOpenDevice不会采取char*[]char**需要将char*其指定为string.它还返回一个句柄.

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