デフォルトとは異なるチャネルを使用して TeamSpeak3 サーバーに接続しようとしています。
ドキュメントは言う:
-defaultChannelArray
TeamSpeak 3 サーバー上のチャネルへのパスを定義する文字列配列。チャネルが存在し、ユーザーに十分な権限があり、必要に応じて正しいパスワードを指定すると、ログイン時にチャネルに参加します。
任意のレベルのサブチャネルへのパスを定義するには、デフォルト チャネルの位置を示すチャネル名の配列を作成します (例: "grandparent"、"parent"、"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 で発生しました
追加情報: 保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。
String[] を使用せずに、C# から C++ DLL への文字列配列を取得するにはどうすればよいですか?
ありがとう!