OK, I have an update for you all...
I deleted all my recent work entirely, took out a previous version, and started adding in my new code from scratch. Now things work more or less as I expect.
There must have been something corrupted in my VI hierarchy. I had previously tried recreating just that one VI, the wrapper for the DLL function, from scratch. That had not solved the problem. This time I reverted to a backup before adding any of the new functionality, and started to add it in from scratch. Now the array passing works as expected, and I can select "Array data pointer" and get, well, an array data pointer 🙂 (And if I pick one of the other options the array is indeed passed differently).
Thank you all for your help. I still have the corrupted VI hierarchy; if it will help anyone I can find out whether I can post that much code....
Batya