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可能会像管理类型一样呈现它,但听起来非常疯狂.
alcOpenDevice不会采取char*[]或char**需要将char*其指定为string.它还返回一个句柄.
[DllImport("OpenAL32.dll", CharSet = CharSet.Ansi)]
static extern IntPtr alcOpenDevice(string devicename);
Run Code Online (Sandbox Code Playgroud)