Size: a a a

2018 November 23

YG

Yuriy Glukhov in ru.nim.talks
var domainsPtr: ptr UncheckedArray[ptr virDomainPtr]
источник

YG

Yuriy Glukhov in ru.nim.talks
var dn = conn.virConnectListAllDomains(cast[ptr ptr virDomainPtr](addr domainsPtr), flags)
источник

T

Tverd in ru.nim.talks
собралось, да
источник

T

Tverd in ru.nim.talks
но есть один момент, как теперь из массива получить virDomainPtr?
источник

T

Tverd in ru.nim.talks
если мы берем domainsPtr[0] то у нас ptr virDomainPtr
источник

YG

Yuriy Glukhov in ru.nim.talks
[] - разименование
источник

T

Tverd in ru.nim.talks
var domain = domainsPtr[0][] ?
источник

YG

Yuriy Glukhov in ru.nim.talks
domainsPtr[0][]
источник

YG

Yuriy Glukhov in ru.nim.talks
да
источник

T

Tverd in ru.nim.talks
Illegal storage access. (Attempt to read from nil?)
источник

T

Tverd in ru.nim.talks
устал уже... В общем щас на С напишу проверю, ибо должно работать было
источник

YG

Yuriy Glukhov in ru.nim.talks
ок. удачи =)
источник

T

Tverd in ru.nim.talks
спасиб за помощь
источник

YG

Yuriy Glukhov in ru.nim.talks
еще момент, если ты на винде, то убедись, что {.libvirt.} юзает правильный колинг конвеншен. если на линухе - пофиг.
источник

T

Tverd in ru.nim.talks
не, линух
источник

T

Tverd in ru.nim.talks
так, на С все тоже самое работает. Буду держать вас в курсе ))))))))))))
источник

YG

Yuriy Glukhov in ru.nim.talks
покажи код на с
источник

T

Tverd in ru.nim.talks
int main(int argc, char *argv[]) {
   int ret = 0;
   virConnectPtr conn;
   char *uri;

   uri = "qemu+tcp://os5-node01/system";

   /* virConnectOpenAuth is called here with all default parameters,
    * except, possibly, the URI of the hypervisor. */
   conn = virConnectOpenAuth(uri, virConnectAuthPtrDefault, 0);

   if (!conn) {
       printf("No connection to hypervisor: %s\n", virGetLastErrorMessage());
       return 1;
   }

   virDomainPtr *domains;
   size_t i;
   unsigned int flags = VIR_CONNECT_LIST_DOMAINS_RUNNING |
                    VIR_CONNECT_LIST_DOMAINS_PERSISTENT;

   ret = virConnectListAllDomains(conn, &domains, flags);
   if (ret < 0)
       error();
   for (i = 0; i < ret; i++) {
       printf("%s\n", virDomainGetName(domains[i]));
       virDomainFree(domains[i]);
   }
   free(domains);
}
источник

T

Tverd in ru.nim.talks
вот тут явно видно, что берется адрес - &domains, в транслированном месте:
dn_2wB3w9cS8caGV50qEzO9c4Mw = virConnectListAllDomains(conn_29bUHwp0psSvlgI4jTcsqRQ, ((virDomain***) (domainsPtr_kiRdTJ6EieEfHQ5RAMoZ0w)), flags_ZnWgeXUjx4ekUBNTDJ4dWQ);
источник

T

Tverd in ru.nim.talks
а тут *** ну или virDomainPtr**
источник