Thanks for replying. Unfortunately, a polyVI is out because I don't have the right version of LV and if I did, my understanding of how they are made is that I that a subVI must made for every possible combination of inputs, which, in this case, would be a combinatoric nightmare. The DLL routine is a variable argument list routine, which means it may called with any number of inputs. Each arg can be a scalar or array of any dimensionality and can be string or any numeric type. The type of each arg is independent. If I, for instance, decided to limit my polyVI to 4 args, which could be scalar or 1D to 3D arrays of strings, int32 or singles, the number of combinations of argument patterns is 4x4x3. That's 48 subVIs in the polyVI.
I thought about using variant args in the subVI which wraps my DLL, but I couldn't figure out how certain intermediate steps in the wrapper could be achieved. Inside the DLL, for the arguments which are (void *), the DLL needs to receive pointers to contiguous memory segements containing data in whatever the machine dependent format is for atomic data types (e.g. float and int32). This means that, from a C perspective, the pointers are to 1D arrays of atomic data types. The intermediate steps I would need to achieve in a wrapper subVI would be, for each arg, to extract a variable of unknown array dimensionality and atomic data type from a variant, reshape it to 1D and somehow pass to the DLL a pointer to a contiguous memory segement containing the array's data in machine dependent format. All these steps are beyond my grasp given my understanding of LV 6.0. If you have any ideas, I'd interested in hearing them. For instance, is there any approach to solving these problems using VI Server capabilities such as Invoke nodes and Property nodes? Is there an easy way to manipulate flattened data and the type values returned from the Flatten Data node to reshape arrays which are, at run time, of unknown data type and dimensionality (e.g. extracted from a variant)?
You mention that (void *) is equivalent to "Adapt To Type". My impression, based on the sparse info about "Adapt To Type" in the NI Developer Zone, is that if I wired an arg to an "Adapt To Type" terminal of the "Call to Lib. Func." node, the DLL would receive a pointer to a memory segment containing data in Labview's internal format. For 1D arrays, I gather that this amounts to a pointer to a contiguous memory segement containting a header with type and length info followed by a sequence of data elements in Labview internal format for the atomic data type. If this understanding is correct, then in I really can't use "Adapt to Type" terminals because, as stated above, the DLL routine expects pointers which point directly to the first data element of an array with data in C-style machine dependent format. Is this understanding correct?
Thanks,
Neal.