It appears when reading multiple ADC channels, you make one call to the DLL per channel, calling GetFirstResult, followed by GetNextResult. All of the examples appear to work this way except when using streams. Is there a DLL function that will pass up an array of analog channels so only a single call to the DLL is needed?
Sounds like you are looking at "U3 Multiple IO Example.vi" which uses the LabVIEW utility VI "AddS-Go-Get.vi" (AGG). AGG uses a loop that calls AddRequestS for each request, makes one call to GoOne, and then calls GetNextResult to read all results. AddRequest and GetResult are just driver operations, so take relatively no time. On the call to GoOne the requests are grouped into as few of low-level packets as possible, sent to the device, and the response(s) read, so only the GoOne call takes noticable time. So this is a very efficient technique.
You could replace "AddS-Go-Get.vi" with "LJUD_eAddGoGet.vi". This does the same thing in a single call to the DLL. The time will be the same either way, but I can think of a couple minor differences: 1. Threading related issues could be avoided by having a single call to the DLL rather than multiple, 2. Error handling is simpler with the multiple call technique and acts more like traditional LabVIEW error handling.
Why do some calls to the DLL require ASCII text commands (OpenLabJackS for axample) , while others require the text commands be converted to an I32 (using StringToConstant)?
In a language like C it just reads in the header file so you can use strings in code but they are passed as numbers as defined by the header file. For languages that can't read the header file, it might be more convenient to pass the strings from the header file so many functions have alternate versions. The eGet() docs have a good description of this:
In the case of the LabVIEW-specific utility function "AddS-Go-Get.vi", there is only one version with the single "S", meaning that IOType is passed as string. This is the most common use, but sometimes when you use the iotype putconfig or getconfig then the channel is a special channel and you usually want a string. We have not made a "AddSS-Go-Get.vi" (no particular reason I can think of), so you need to use StringToConstant to convert the special channel strings to numbers.
The other place I see this happening is if rather than the utility function you used the DLL call "LJUD_eAddGoGet.vi". Many languages can't pass an array of strings, so we never made "LJUD_eAddSGoGet.vi" or "LJUD_eAddSSGoGet.vi".