Simplest way to create a VT_UI1 | VT_ARRAY VARIANT from a Java String?

21 views
Skip to first unread message

Markus Karg

unread,
Jan 25, 2024, 7:39:24 AMJan 25
to Java Native Access
The following code successfully creates a VARIANT from a Java String, where each Java char is one byte element n the SafeArray:

var byteArray = str.getBytes();
var safeArray = OaIdl.SAFEARRAY.createSafeArray(new WTypes.VARTYPE(VT_UI1), byteArray.length))
for (var i = 0; i < byteArray.length; i++)
    safeArray.putElement(byteArray[i], i);
var variant = new VARIANT(safeArray);

I wonder if JNA has some utility that makes it much more convenient and spare some lines (and in particular the custom loop)? 🤔

Matthias Bläsing

unread,
Jan 25, 2024, 12:36:07 PMJan 25
to jna-...@googlegroups.com
var safeArray = OaIdl.SAFEARRAY.createSafeArray(new WTypes.VARTYPE(VT_UI1), byteArray.length);
Pointer rawPointer = safeArray.accessData();
rawPointer.write(0, byteArray, 0, byteArray.length);
safeArray.unaccessData();

Greetings

Matthias

Markus Karg

unread,
Jan 25, 2024, 1:16:36 PMJan 25
to Java Native Access
Wow, thank you Matthias, this is amazing! 🤩
Reply all
Reply to author
Forward
0 new messages