Я работаю на Teamspeak3 плагин написан на C# (с использованием this base), и я работаю на получение списка каналов, это то, как сделать это в C:Как вы выполняете итерацию через uint64 * с size_t, и что такое equivilent для 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#?
Рассматривали ли вы проверить существующий вопрос, если это помогает, (. Повторно size_t эквивалент в C#) как [Правильный путь маршала size_t * ?] (http://stackoverflow.com/questions/1309509/correct-way-to-marshal-size-t) Короткий ответ: «** Используя IntPtr ** и/или ** UIntPtr ** делает это правильно - типы есть там специально для этой цели! ... » – localhost
Я просмотрел этот комментарий, но я также спрашиваю, как итерация возможна с помощью size_t, и если есть способ сделать то же самое в C#. Потому что в этом примере я понятия не имею, каковы последствия этого. – Birdboat
Из моего собственного тестирования, итерация над 'size_t' похожа на итерацию по' int', за исключением того, что переменная определяется как 'size_t', а не' int', а сравнение в цикле также должно выполняться с использованием переменной типа 'size_t'. Только в качестве примечания можно использовать тип-литье в int; то есть '(int) my_size_t', однако, нецелесообразно - относиться к каждому типу как к его правильному типу, когда литье не является необходимым. Для Q о том, как это сделать на C#. [C#: Извлечение и использование IntPtr * через отражение] (http://stackoverflow.com/questions/1126034/c-retrieving-and-using-an-intptr-through-reflection) help? – localhost