gpt4 book ai didi

c# - 如何使用 size_t 遍历 uint64*,c# 的等价物是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 13:28:43 27 4
gpt4 key购买 nike

我正在开发一个用 c# 编写的 Teamspeak3 插件(使用 this base ),我正在努力获取 channel 列表,这是在 c 中的实现方式:

/* Print list of all channels on this server */
char* s;
char msg[1024];
anyID myID;
uint64* ids;
size_t i;
unsigned int error;

if(ts3Functions.getChannelList(serverConnectionHandlerID, &ids) != ERROR_ok) {
ts3Functions.logMessage("Error getting channel list", LogLevel_ERROR, "Plugin", serverConnectionHandlerID);
return;
}
printf("PLUGIN: Available channels:\n");
for(i=0; ids[i]; i++) {
/* Query channel name */
if(ts3Functions.getChannelVariableAsString(serverConnectionHandlerID, ids[i], CHANNEL_NAME, &s) != ERROR_ok) {
ts3Functions.logMessage("Error querying channel name", LogLevel_ERROR, "Plugin", serverConnectionHandlerID);
return;
}
printf("PLUGIN: Channel ID = %llu, name = %s\n", (long long unsigned int)ids[i], s);
ts3Functions.freeMemory(s);
}
ts3Functions.freeMemory(ids); /* Release array */

for(i=0; ids[i]; i++) , 它指出 uint64*正在使用 size_t 进行迭代.

我想知道迭代是如何工作的,c# 中最接近的等效项是什么?

最佳答案

我找到了答案(感谢 localhost 和 Chris 找到了答案!)。基本上,ulong* 指向一个数组,size_t 遍历它,试图找到 channel 的 ID。因为在 C++ 中,在 for 循环中,除了零之外的每个数字都是真的,它一直查询它直到没有更多的 channel ID,并返回一个零。 The TeamSpeak Community Forums Post

对于使用 this plugin 对 C# 中的代码感兴趣的任何人:

if (funcs.getChannelList(serverConnectionHandlerID, ref v) != Errors.ERROR_ok) {
funcs.logMessage("Failed", LogLevel.LogLevel_ERROR, "Plugin", serverConnectionHandlerID);
break;
}
// Convert it to a ulong*
ulong * ptr = (ulong * ) v.ToPointer();
// Iterate through the array
for (ulong t = 0; ptr[t] != 0; t++) {
// The String result
string result;
// The pointer result
IntPtr res = IntPtr.Zero;
/*
Channel Variable Arguments:
1: The server connection ID
2: The iterated channel id
3: An IntPtr at 0, which signifies CHANNEL_NAME
4: A reference to stores results
*/
if (
funcs.getChannelVariableAsString(serverConnectionHandlerID, ptr[t], new IntPtr(0), ref res) != Errors.ERROR_ok) {
// Error message
funcs.logMessage("Error", LogLevel.LogLevel_WARNING, "Plugin", serverConnectionHandlerID);
break;
}
// Convert the pointer to a string
if ((result = Marshal.PtrToStringAnsi(res)) == null) break;
// Print it
funcs.printMessageToCurrentTab(result);
}

关于c# - 如何使用 size_t 遍历 uint64*,c# 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com