I recently picked up an Dynon ELAB-080 while working on a project:

Let me start off by saying that this thing is a sweet little piece of hardware. The demo that is available on Dynon's website works great, and it's a bargain at $500 for what you get. Too bad I have to return it when the project is complete.

The project I'm working on requires me to create a particular type of waveform and to send this out through the Arbitrary Waveform Generator output on the ELAB-080, then bring it back in after it's gone through a circuit. After this I need to compare the original signal with the recieved signal, do some analysis, plot some graphs, and the like.

Because of the nature of this project, I cannot simply use their demo software. I must write my own using their DLL interface and I'm doing this in Visual C++ even though I'm much more comfortable writing in Visual Basic. The reason for this is that their DLL simply will not work with VB6 (perhaps it will with .NET) so I'm being forced to learn C++ this month. I'm fairly proficient at C but C++ is completely new to me. So far so good.

While learning VC++ and learning this gadget, I decided to write a very simple test application that uses every documented function in the DLL file. This is where the trouble began. The DLL I'm working with was not compiled with an export table so the function names are all screwy.

Example:

ElabDLL.dll function name as documented: GetHWStatus()

Function name in reality: ?GetHWStatus@@YA_NXZ()

It just gets worse from there. The next problem I noticed was due to a documentation problem. For two days I was tearing my hair out trying to implement the SetupAWG() function. No matter what I tried it would return a zero, meaning the call failed. After talking with Dynon, they let me know that this function always returns a zero, that it's a bug in the DLL, and that I should just ignore this. It's been another few days and I still can't get this one function to work. Dynon was kind enough to let me send in a copy of my code so they could look at it to see where I'm going wrong. It is very possibly another documentation error.

The natural progression of my code was supposed to include learning and using the arbitrary wave generator functionality so that I could then inject a signal to the DSO (digital storage oscilloscope) input to learn the DSO functions. To get around this, I was loaned an incredibly sweet Agilent 33250A arbitrary waveform generator.

On my first attempt I was able to use the DSO functions in the DLL to read in a signal from the Agilent unit, then write this data out to a plain text file. I then read the data into Dplot, a graphing package. Here is the data plotted in a nice graph: