On Thursday, April 30, 2015 at 4:29:21 PM UTC+2, Jan Jongboom wrote: > I have an IDL file and I want to add a new attribute that contains an array > of strings. The interface is implemented in JavaScript and I'm writing C++ > code. > > IDL: > > readonly attribute nsIArray osPaths; // DOMString[] > > Consuming in C++: > > nsCOMPtr<nsIArray> bla; > app->GetOsPaths(getter_AddRefs(bla)); > > uint32_t length; > bla->GetLength(&length); > printf("Length=%d\n", length); > > All OK. Prints 'Length=1' when I add one element in the array. But now... how > do I get the strings out of here. I found do_QueryElement and it's > nsISupports* friends, but none of them say they can handle it... > > for (uint32_t j = 0; j < length; ++j) { > nsCOMPtr<nsISupportsPrimitive> isp = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsCString> iscs = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsString> iss = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsPRBool> isb = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsPRUint8> isu8 = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsPRUint16> isu16 = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsPRUint32> isu32 = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsChar> isc = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsPRInt16> isi16 = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsPRInt32> isi32 = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsFloat> isf = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsDouble> isd = do_QueryElementAt(bla, j); > nsCOMPtr<nsISupportsInterfacePointer> isip = do_QueryElementAt(bla, j); > > printf("isp=%d ", !!isp); > printf("iscs=%d ", !!iscs); > printf("iss=%d ", !!iss); > printf("isb=%d ", !!isb); > printf("isu8=%d ", !!isu8); > printf("isu16=%d ", !!isu16); > printf("isu32=%d ", !!isu32); > printf("isc=%d ", !!isc); > printf("isi16=%d ", !!isi16); > printf("isi32=%d ", !!isi32); > printf("isf=%d ", !!isf); > printf("isd=%d ", !!isd); > printf("isip=%d ", !!isip); > printf("\n"); > } > > Result: isp=0 iscs=0 iss=0 isb=0 isu8=0 isu16=0 isu32=0 isc=0 isi16=0 isi32=0 > isf=0 isd=0 isip=0 > > So what type is in here, and how can I get it out of the array? I just want > normal nsString objects.
Solved it. I was not passing an nsIArray from JS side but a normal array. _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform