我得到了一些未知错误的原因 来自C#中的System :: CreateChannelGroup函数
private void FmodERRCheck(Fmod.RESULT result){
if (result != RESULT.OK)
{
MessageBox.Show(Fmod.Error.String(result));
}
}
private void InitFmodSystems()
{
Fmod.Factory.System_Create(out system);
system = new Fmod.System(IntPtr.Zero);
system.init(3, INITFLAGS.NORMAL, IntPtr.Zero);
channelGroup = new ChannelGroup(IntPtr.Zero);
FmodERRCheck(system.createChannelGroup("", out channelGroup));
}
在类上声明的变量。
我编写了InitFmodSystems()方法来启动fmod系统。
FmodERRCheck(system.createChannelGroup("", out channelGroup));
此行返回“ERR_INVALID_PARAM”错误。
怎么了?
答案 0 :(得分:0)
问题是将IntPtr.Zero
传递给System
构造函数。在FMOD中,您可以使用FMOD_System_Create
获取System
对象的指针,并可以将其传递给其他函数或C#包装器中的构造函数。
工作代码如下:
Fmod.Factory.System_Create(out IntPtr handle);
System system = new Fmod.System(handle);
在FMOD C#包装器中,您不能将IntPtr.Zero
传递给任何“核心”类构造函数,即无效句柄,它期望{{{ 1}}类。
因此,在正确创建System
对象(请参见上面的示例)之后,您将像这样创建System
:
ChannelGroup
答案 1 :(得分:-1)
您正在初始化channelGroup变量。 使用out参数时,不能使用初始化变量。
所以它一定是这样的。
ChannelGroup channelgroup;
FmodERRCheck(system.createChannelGroup("", out channelGroup));
在这个例子中,channelGroup变量保持未分配状态,直到它作为out参数进入函数。
修改强>
也可能不允许使用name参数的空字符串。但初始化的参数也是一个问题。