TeamSpeak3客户端SDK——ts3client_startConnection()的defaultChannel
本文关键字:defaultChannel startConnection 客户端 SDK ts3client TeamSpeak3 | 更新日期: 2023-09-27 18:03:52
我正在尝试使用与默认通道不同的通道连接到我的TeamSpeak3服务器。
医生说:
-defaultChannelArray
定义到TeamSpeak 3服务器上通道的路径的字符串数组。如果通道存在,并且用户有足够的权限并提供正确的密码,则该通道将在登录时加入。
要定义任意级别的子通道的路径,创建一个通道名称数组,详细说明默认通道的位置(例如:"祖父母","父母","mydefault",")。数组以一个空字符串结束。
传递NULL来加入服务器的默认通道。
函数签名如下:
unsigned int ts3client_startConnection(uint64 serverConnectionHandlerID,
const char* identity,
const char* ip,
unsigned int port,
const char* nickname,
const char** defaultChannelArray,
const char* defaultChannelPassword,
const char* serverPassword);
TeamSpeak的c#示例工作得很好,它使用了这样的方法:
string defaultarray = "";
/* Connect to server on localhost:9987 with nickname "client", no default channel, no default channel password and server password "secret" */
error = ts3client.ts3client_startConnection(scHandlerID, identity, "localhost", 9987, "client", ref defaultarray, "", "secret");
if (error != public_errors.ERROR_ok) {
Console.WriteLine("Error connecting to server: 0x{0:X4}", error);
Console.ReadLine();
return;
}
在他们的代码中导入DLL时,他们使用:
[DllImport("ts3client_win32.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "ts3client_startConnection", CharSet = CharSet.Ansi)]
public static extern uint ts3client_startConnection(uint64 arg0, string identity, string ip, uint port, string nick, ref string defaultchannelarray, string defaultchannelpassword, string serverpassword);
现在我的问题:使用c#,我试图传递非默认通道数组的方法,但它不是工作得很好。
我尝试了以下方法,但都无济于事:
string defaultarray = """name"", """"";
string defaultarray = "name,";
我总是得到一个错误当做任何事情除了:
string defaultarray = "";
类型为"System"的未处理异常。AccessViolationException'发生在ts3_client_minimal_sample.exe
附加信息:试图读写受保护的内存。这通常表明其他内存已损坏。
如何从c#到c++ DLL获得字符串数组,而不使用string []?
谢谢!
谢谢你,凤凰!
原来的答案没有帮助,但下面的答案有帮助:esskar的答案
更新代码:
[DllImport("ts3client_win32.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "ts3client_startConnection", CharSet = CharSet.Ansi)]
public static extern uint ts3client_startConnection(uint64 arg0, string identity, string ip, uint port, string nick, string[] defaultchannelarray, string defaultchannelpassword, string serverpassword);
...
string[] defaultarray = new string[] { "name", ""};
/* Connect to server on localhost:9987 with nickname "client", no default channel, no default channel password and server password "secret" */
error = ts3client.ts3client_startConnection(scHandlerID, identity, "localhost", 9987, "client", defaultarray, "password", "secret");
if (error != public_errors.ERROR_ok) {
Console.WriteLine("Error connecting to server: 0x{0:X4}", error);
Console.ReadLine();
return;
}
基本上,我将DllImport从ref string defaultChannelArray
更改为string[] defaultChannelArray
。正如那个线程的另一个评论者提到的,c#数组是作为引用传递的。然后我传递了一个简单的c#字符串数组。完美的工作!
我把它弄得太复杂了