有:
[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可能会像托管类型一样呈现它,但听起来很疯狂。
答案 0 :(得分:6)
alcOpenDevice不接受char*[]
或char**
,需要char*
,您应将其指定为string
。它还返回一个句柄。
[DllImport("OpenAL32.dll", CharSet = CharSet.Ansi)]
static extern IntPtr alcOpenDevice(string devicename);