LabVIEW coding using wnaspi32.dll

Hi to all, here I need you guys help in LV coding with wnaspi32.dll for I have no experience in doing that at all!
I will appreciate if any of you can tell me what the equivalent in lv code for
1)
typedef struct
BYTE SRB_Cmd; // ASPI command code = SC_EXEC_SCSI_CMD
BYTE SRB_Status; // ASPI command status byte
BYTE SRB_HaId; // ASPI host adapter number
BYTE SRB_Flags; // ASPI request flags
DWORD SRB_Hdr_Rsvd; // Reserved
BYTE SRB_Target; // Target's SCSI ID
BYTE SRB_Lun; // Target's LUN number
WORD SRB_Rsvd1; // Reserved for Alignment
DWORD SRB_BufLen; // Data Allocation Length
BYTE *SRB_BufPointer; // Data Buffer Point
BYTE SRB_SenseLen; // Sense Allocation Length
BYTE SRB_CDBLen; // CDB Length
BYTE SRB_HaStat; // Host Adapter Status
BYTE SRB_TargStat; // Target Status
void (*SRB_PostProc)(); // Post routine
void *SRB_Rsvd2; // Reserved
BYTE SRB_Rsvd3[16]; // Reserved for expansion
BYTE CDBByte[16]; // SCSI CDB
BYTE SenseArea[SENSE_LEN+2]; // Request Sense buffer
2.) In the following example, how do I do the (a) and (b) correctly?
This example sends a SCSI Inquiry command to host adapter #0, target #0, LUN
#0.
SRB_ExecSCSICmd MySRB;
DWORD ASPIStatus;
(a) char InquiryBuffer[32];
MySRB.SRB_Header = SC_EXEC_SCSI_CMD;
MySRB.SRB_HaId = 0;
MySRB.SRB_Flags = SRB_DIR_IN | SRB_POSTING;
MySRB.SRB_Hdr_Rsvd = 0;
MySRB.SRB_Target = 0;
MySRB.SRB_Lun = 0;
MySRB.SRB_BufLen = 32;
MySRB.SRB_SenseLen = SENSE_LEN;
(b) MySRB.SRB_BufPointer = InquiryBuffer;
MySRB.SRB_CDBLen = 6;
MySRB.RB_PostProc = PostProcedure;
MySRB.CDBByte[0] = SCSI_INQUIRY;
MySRB.CDBByte[1] = 0;
MySRB.CDBByte[2] = 0;
MySRB.CDBByte[3] = 0;
MySRB.CDBByte[4] = 32;
MySRB.CDBByte[5] = 0;
I am really struggling in getting it right for the *SRB_BufPointer (data buffer pointer) to work so as the aspi32.dll function will returns data to the pointer's buffer. But
q: How do get this buffer pointer correctly and how to read the buffer data after?
Hope that I am giving enough information on my problem. And, I will really aprreciate if anyone of you out there can help me on this. really.
Hear from ya.
Cheers and warmest regards
ian
[email protected]
Ian F
Since LabVIEW 5.1... 7.1.1... 2009, 2010
依恩与LabVIEW
LVVILIB.blogspot.com

Well, I don't think NI should spend much time on this. The configuration screen necessary to configure all those options really would be a mess to deal with and you would still need to know all the detail knowledge about C data types, how they are passed between functions, particular byte boundary alignement etc.
Without this knowledge present you still couldn't use these options and once you have the knowledge, writing a simple wrapper DLL which goes between LabVIEW and your complicated data structure and possibly callback API is actually much simpler than trying to configure and possible wire your API interface in LabVIEW.
Of course knowing the layout of the LabVIEW data structures you can basically use a trick to get the pointer to a LabVIEW string into a data structure to be passed to a DLL but it is still far from simple. The callback pointer however can't be tricked from a LabVIEW diagram (at least not without so much magic that writing a DLL is actually hundred times faster than trying to get this to work in LabVIEW).
You need to know that LabVIEW byte arrays are basically a pointer to a pointer to a buffer with an additional i32 at the beginning indicating the size. So by allocating a LabVIEW array you can then place a Call Library Node on the diagram with following configuration:
library: LabVIEW
function name: MoveBlock
return value: void
first parameter: LabVIEW array handle of uInt8
second parameter: uInt32 pointer to value
third parameter: int32 value
Then wire the array to the first parameter, a 0 constant to the second and a 4 constant to the third. The resulting value from the second parameter is the pointer to the effective LabVIEW array buffer and adding 4 to this value will be the pointer to the begin of the actual array.
Make sure the array wire stays valid until the Call Library Node returns (by wiring it to a structure boundary which depends on some output of the Call Library Node and not branching the wire to anyplace else until that point) and resize the array after the Call Library Node returns, by the actual size returned somewhere from the Call Library Node. Make sure the intial array is as large as required by the API function or as you have indicated in one of the parameters to the API function as otherwise the function will crash.
Remains filling in the structure which will be a bit of a pain also, but I told you that writing a wrapper DLL is almost always faster than trying to do such things in LabVIEW.
Rolf Kalbermatter
Rolf Kalbermatter
CIT Engineering Netherlands
a division of Test & Measurement Solutions

Similar Messages

  • Error while using LabVIEW 8.2.1 Dll from Visual C++ 6.0

    I am getting an error while using a LabVIEW 8.2.1 dll from Visual C++ 6.0 application. This is what I am doing:
    1) Created a dll using LabVIEW 8.2.1 (I used a tutorial from NI knowledge base: "Creating DLLs from 6.0i". It is a temperature conversion VI; input DegreeF and get DegreeC out). Instead of LabVIEW 6.0i, I used 8.2.1. It created the dll Convert_Temp.dll successfully.
    2) Then I created a Visual C++ 6.0 application (used a tutorial from NI knowledge base: "Calling a DLL from Microsoft Visual C++ that was Generated by LabVIEW 6i). I could build the project and create an executable application F_To_C.exe.
    3) Then copied the LabVIEW dll Convert_Temp.dll into the folder where F_To_C.exe resides. Using windows explorer, went into that folder, and executed the application.  I got the following error:
    System Error 998 while loading the LabVIEW run-time engine (C:\Program Files\National Instruments\Shared\LabVIEW Run-Time\8.2\lvrt.dll).
    Convert_Temp requires a version 8.2.1 (or compatible) LabVIEW Run-Time Engine. Please contact the vendor of Convert_Temp to correct this problem.
    I checked the folder: C:\Program Files\National Instruments\Shared\LabVIEW Run-Time\8.2\. It has the file lvrt.dll.
    So why am I getting this error?
    GKB

    sounds like you need to install the LabVIEW 8.2.1 runtime. Not the 8.2 runtime engine.
    Paul <--Always Learning!!!
    sense and simplicity.
    Browse my sample VIs?

  • Build a DLL in LabVIEW & Use the DLL in LabVIEW

    I am trying to build a DLL for the simple vi with LabVIEW and want to use the DLL in LabVIEW. is it impossible?
    I wrote a vi and it have 2 terminals. one is the input for numeric dbl data type and one another is the output for numeric dbl 1D array data type.
    It was built with the Application builder for LabVIEW 8.0 and DLL was created successfully.
    I want to use this DLL in new vi with LabVIEW.
    Call library function used. I wrote a new vi to use that DLL.
    In config dialog I config each parameter for dll and connected terminals. but it doesn't work
    pleas refer to the attatched file and let me know what I missed.
    Attachments:
    Array1D.zip ‏60 KB

    At first I kept scratching my head wondering why someone would want to do this. Create a DLL in LabVIEW to call it from LabVIEW. Seems redundant. But, perhaps it's an exercise or perhaps it's for testing the DLL...
    In any event, calling the DLL worked for me in 8.2. How are you configuring your Call LIbrary Function node? I have it set up as follows:
    return type: void
    iteration: Numeric, Signed 32-bit Integer, pass by value
    array1D2: array type, Signed 32-bit Integer, 1 dimension, "Array Data Pointer" format
    len: Numeric, Signed 32-bit Integer, pass by value
    Then I called the DLL like this:
    Message Edited by smercurio_fc on 03-16-2007 12:57 PM
    Attachments:
    Example_BD.png ‏2 KB

  • LabView TEDS library into DLL or ActiveX Control so that I can use it in C or Visual Basic?

    We are developing software in LabWindows/CVI and Microsoft C. I heard that LabView can generate DLLs. Can I turn LabView TEDS library into DLL or ActiveX Control so that I can use it in C or Visual Basic development environment?

    Technically what you are proposing is possible with LabVIEW. With LabVIEW's application builder, VIs can be built into dlls. Also, LV has ActiveX hooks and so you could create a system for calling into it from CVI. However, this is not what I would recommend.
    The LabVIEW VIs have been written to a preliminary version of the IEEE specification (1451.4) that describes the TEDS data which is primarily why I'm advising you against using them. Once the IEEE spec is approved (the current timeline is currently late March), it will become public and you can write your own code according to the specification (or wait for someone else to write it). To help you get started, the spec includes flex and bison code that describes the syntax and structure of the template files
    Internally, we've written some C, C++ and Java code to the preliminary version of the spec and we've found that we can duplicate the functionality of the TEDS Library for LV in roughly 2 weeks in any other language.

  • Use a wrapper to build a C++ Dll that calls a C++ .lib and Use the Dll is LabView

    Hi All,
    I need to access some functions in a C++ .lib within LabView, but has no source code for the library.  Can I build a Dll in Visual C++ that calls this library, then have LabView calls the Dll? If so, how different is building this Dll compared to building a Dll from a .cpp file?  I am new to C++, could some one suggest how to use the .lib in Visual C++ 6.0 studio to build the Dll?
    Thanks for your help.
    Bryan

    BryanL wrote:
    Hi Rolf, thanks for the info. I will try to build a vi to call that function. For a more immediate need, I can use a downloaded vi that calls SetActiveWindow function, then use its output windowshandle to find the window name with a lvwuser32.dll function. The problem is this find window name function vi requires a windows reference input, which does not take the window handle output from the SetActiveWindow vi. How do i convert the window handle into a reference number? Thanks again.
    Don't try to write a VI to call that function. That function requires a callback function pointer, something that is more or less impossible (well you can get it done but it is not worth the trouble) to create in LabVIEW. You will need an external DLL that does the enumeration and returns an array of strings to LabVIEW.
    The lvwuser32.dll also just uses window handles. Look inside those VIs and you should see that those window references are typecasted into uint32 and then passed to the Call Library Node if I remember correctly. You definitely should be able to typecast the (probably uint32) you get from your other function into the window reference that that VI takes. The window reference of the lvutil library is just a nice trick to make it refnum like so that you can not inadvertly wire something else to it (and confuse/crash Windows).
    Rolf Kalbermatter
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Creating dll from Labview for use in VB

    In this document:
    Accessing LabVIEW 6.0 Strings from Microsoft Visual Basic
    It mentions you need to input a length for your string inputs. When I create my dll no len is available for string parameters only Arrays. Is this a typo?
    Also, In my LV code I have a path input. Can VB work with this? I have already converted my LV code to accept path as string...just wondering if I really have to do that.

    Drugar,
    Only string outputs (indicators) that are wired on the connector pane will show the length parameter selection when you try to build the dll.
    I don't think VB accepts paths, so you should convert the path to string in LabVIEW before building the dll.
    Zvezdana S.

  • How can I use a dll if I dont have a header file

    I'm not sure if I'm even trying the possible here as I have searched and not been able to find much at all.  However I figured it was worth asking here.
    I have access to several dll's used by a program, I need to open a file using the program (for some reason it is completely non responsive unless you open it "within" the program itself) and so decided to browse the .dll files included.  Ive found a few functions which may carry out the function I need.  Is there a way of figuring out the inputs/outputs if I don't have documentation or a header file?
    This is the next stage in a huge project I am working on at the moment and I've been banging my head against the wall all day trying to figure this out.
    Thanks in advance for any help
    Rik
    That glass?
    Thats glass is neither half full or half empty....
    Its twice the size it needs to be

    Yes, that makes sense. It also means that what you are trying to do is not likely to work. You have no way of knowing what the program does when opening the file, so guessing at using the DLLs is purely a shot in the dark without even knowing where the dark is. Even if you could find the function (assuming it's just one) that loads a file, how is the program supposed to use it now? That function has to be called from within the program. When you call it from LabVIEW you are not sitting inside the program's memory space, so it has no way of knowing about the file.
    I would suggest, instead, to see if the program accepts command-line parameters. For example, does it accept a name of a file to open as part of launching it from the command line? If not, then you may need to resort to trying to control it via automation. If it has no built-in automation then you need to resort to using the OS to make pretend you're clicking buttons and typing text. This has come up many times before, and there have been numerous posts on this, so please do a search on controlling an external program from LabVIEW within this forum. You can call the Windows API functions to move the mouse to a specific location and click the button as well as typing text, or you can use third-part automation tools. One that I have used successfully is AutoIt. The search I indicated will yield other suggestions. 

  • Using a .dll file in Diadem2012

    Dear folks,
    I've got a .dll which was created using the Diadem GPI toolkit 10.2 and Microsoft Visual Studio 8.0, I guess. I'm currently using this DLL under Diadem 9.0.
    Now I'd like to use this same DLL under Diadem 2012, but it won't work. When loading this DLL via the GPI-DLL loader, It only says .dll couln't be loaded, no further output, no more debug information...?
    What can I do to load this DLL into Diadem2012, or do I have to code the whole DLL new?!
    Thanks for your help in advance.
    Tim

    Hi Walter,
    thanks for your fast reply.
    I tried to recompile that file in Visual Studio 10, because I had an old project file coded in Visual Studio 8. Unfortunately, that did'nt work. The .dll could not be built. So I'd like to try to install the runtime library.
    I don't know under which visual studio version, the dll file was built, so what should I do? Install Visual Studio 8 and 6 and hope that the runtime library I need is installed then?
    Thanks for your help.
    Greets Tim

  • Labview hangs when accessing dll

    Im accessing an active x dll using labview 8.21.   When we query the dll all parallel loops in labview hang until the dll returns.   Is there a way to get around this behaivour?

    HI,
    I do not know if this will help, but there is an issue with the Call Function Library node in LabVIEW 8.2.1 and is posted in the LabVIEW 8.2.1 Readme help here:
    If you configure a Call Library Function Node to call a LabVIEW DLL, place a checkmark in the Specify path on diagram checkbox on the Function page of the Call Library Function dialog box, and select Run in UI thread in the Thread control, LabVIEW hangs when executing the Call Library Function Node. To correct this problem, select Reentrant instead of Run in UI thread in the Thread
    control. If you configure the Call Library Function Node to call a DLL
    written in C with these same settings, LabVIEW works correctly.
    I hope this helps,
    Regards,
    Nadim
    Applications Engineering
    National Instruments

  • Help improve my style and quality of LabVIEW coding

    Hello,
    I am thinking of doing the CLD certification for LabVIEW and have started preparing by reading some literature (code style guidelines, etc.) and also trying to implement the newfound knowledge into my coding habits. I have also read that local variables are bad, and that the best practice is to avoid them.
    However, I am having difficulty implementing all of the material I read about LabVIEW coding into my VIs - which are almost always coded in the same manner as the one I attached. Basically all of the LabVIEW applications I make at my company require reading DAQ inputs, processing the acquired data and doing some control algorithms, which send control signals to DAQ outputs, and writing all of the data to a file.
    I have attached a sample VI (with dummy DAQ subVIs). If you have the time - any ideas, comments, consideration or improvements on all areas of the VI are greatly appreciated and welcomed. I think this will be the best way for me to learn new LV tips and tricks.
    Thank you!
    Attachments:
    LabVIEW coding test.zip ‏375 KB

    Jeff Bohrer wrote:
    OK I've seen worse. (actually not too bad but...)
    Use wire labels especially when you have wires that don't fit on 1 screen
    You show a lack of understanding how timed loops differ from while loops  (event structure in TLoop with DT=0, Elapsed Timer in Timed Loop.   Someday you'll say WTH was I thinking spawing unique execution systems for those
    You could have saved a lot of locals and data duplication by enqueueing data from the DAQ loop to the Write File Loop instead of using a notifier
    Sometimes an Array of Clusters can be a good idea  clusters of clusters of same data type can often be harder to maintain- want to add a new element- maybe test a single point? just init the array of clusters (like from a file perhaps?)  Saves a lot of confusion
    Saving timestamps to file as strings is a pet peeve of mine.  Now how do you graph vs time?  Check out My Idea 
    There is no reason to avoid creating sub-vis and making the Main BD fit on one screen.  I fact it can help to show the code high level structure.
    Straighten them wires!
    Most of your issues would be solved by re-thinking your data structures- A good place to concentrate on to improve.
    Keep Slinging- you'll get there
    Ok, will do.
    Can you explain what the difference is? Or point me to some good literature on this topic? 
    How exactly can you do that? I tried sending data via notifier, but I could not send different data types.
    I do not quite understand what you mean.
    Also, I do not understand what the problem here is. The graph shows data vs time.
    Will try.
    Mark Yedinak wrote:
    OK, I did take a look at the code now. HEre are some additional points to consider.
    Document, document, document. None of your controls or indicators are documented. Also, document your code more to help someone looking at it to actually understand it better.
    Definitely avoid the use of all of the local variables. Thing of a design pattern that separates the processing tasks from the UI. If you have one task handling the UI you really don't need to use local variables.
    Avoid unnecessary bends in your wires.
    Definitely get your block diagram to fit on a smaller screen. These days it shouldn't be larger than 1600x1200 or close to that.
    Modularize your code. Use more subVIs
    You have a classic off by one error in your code. All of your loops use the stop button to exit. However you always check the value at the beginning of the loop iteration therefore you will execute the loop one more time than necessary.
    Avoid unnecessary frame structures. You have a frame structure in the second loop that does nothing for you. Everything down stream of it will execute in the correct order because of the data dependencies. The frame structure serves no purpose here.
    Try to avoid deeply nested case structures. Once I start to see that happening in my code I rethink my logic. At a minimum I would build an array of the various Boolean values and convert them into a number and use that to chose the appropriate case to execute rather than nesting three or more case structures.
    Will do.
    How can I accomplish all the tasks in my application without the use of local variables? I admit, this is the main reason I opened this thread ... because I have tried to imagine a design architecture that would work without local variable, but was unsuccessful. Can someone please explain in detail how to do this on this specific application.
    Will try to.
    I will try, but I make my block diagram to the width of my screen, but vertically I do not limit its size - so I can easily scroll up and down to move around.
    I try to create as many subVI as possible, but only on code that is reusable on other projects. Is also better to have a lot of single use subVIs with every project? Doesn't this add unnecessary overhead and slows the application?
    What would be the correct way to stop the application?
    Ok.
    Ok. I only do your proposed solution on nested case with a depth of at least 4. 3 nested structures were still acceptable for me, but I will listed to your proposal and try to improve on this.
    Thank you all for taking the time to look at the code and writing your comments.
    I already have the CLAD certification, but this was only a test. I think I will be able to try the CLD exam sometime next year, but I have to learn and implement different coding style in my everyday application (at work). With your help I am sure I will be able to accomplish this - reading literature is one thing, but actual projects are another.

  • Communicate using libusb0.dll

    Hello,
    I have to develop an application in LabVIEW witch manage the MOWAY robot. I communicate with a RC USB Key so i have to handle with the libusb0.dll. My problem is the "usb_device *dev" used to open every function of the Dll and this type is define by :
    struct usb_device
    struct usb_device *next, *prev;
    char filename[LIBUSB_PATH_MAX];
    struct usb_bus *bus;
    struct usb_device_descriptor descriptor;
    struct usb_config_descriptor *config;
    void *dev; /* Darwin support */
    unsigned char devnum;
    unsigned char num_children;
    struct usb_device **children;
     As you see this type is not retranscriptible in LabVIEW.
    So i tried to wrap this Dll in C but it was not really a success.
    If you have any idea, how to use this Dll in LabVIEW, i will be glad to hear it.
    Thanks for your time.

    Hello,
    Thank you for yours answers.
    I tried the link you send me JérémiC so i finally get that :
    #include "stdafx.h"
    #include "usb.h"
    #include <windows.h>
    #ifdef _MANAGED
    #pragma managed(push, off)
    #endif
    #define LIBUSB_DLL_NAME "libusb0.dll"
    typedef usb_dev_handle * (*usb_open_t)(struct usb_device *dev);
    static usb_open_t _usb_open = NULL;
    typedef struct usb_bus * (*usb_get_busses_t)(void);
    static usb_get_busses_t _usb_get_busses = NULL;
    #define MY_VID 0x04D8
    #define MY_PID 0x0014
    extern "C" __declspec(dllexport)usb_dev_handle *open_dev(void);
    BOOL APIENTRY DllMain (HMODULE hModule,
    DWORD ul_reason_for_call,
    LPVOID lpReserved
    HINSTANCE libusb_dll = LoadLibrary(LIBUSB_DLL_NAME);
    if (!libusb_dll)
    return FALSE;
    _usb_open = (usb_open_t)
    GetProcAddress(libusb_dll, "usb_open");
    _usb_get_busses = (usb_get_busses_t)
    GetProcAddress(libusb_dll, "usb_get_busses");
    return TRUE;
    usb_dev_handle *open_dev(void)
    struct usb_bus *bus;
    struct usb_device *dev;
    for (bus = usb_get_busses(); bus; bus = bus->next)
    for (dev = bus->devices; dev; dev = dev->next)
    if (dev->descriptor.idVendor == MY_VID
    && dev->descriptor.idProduct == MY_PID)
    return usb_open(dev);
    return NULL;
    #ifdef _MANAGED
    #pragma managed(pop)
    #endif
    But i still have this error :"IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR""
    I know that it's no longer a LabVIEW problem but i really need a solution to this program.
    2 IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"

  • How to use 'SBOAddonReg.dll'

    Hi,Everyone.
    I want to use 'SBOAddonReg.dll' and to delete registry.
    Is it possible although development environment is 'VB.NET2003'?
    Thanks for help.

    Hi Barend.
    Do you think that it is right to use the following coding instead of using 'SBOAddonReg.dll'?
    Dim regkey As Microsoft.Win32.RegistryKey = _
        Microsoft.Win32.Registry.LocalMachine.OpenSubKey( _
            "Software\SAP\SAP Manage\AddOns\TEST", True)
    regkey.DeleteSubKey("TEST01", False)
    regkey.Close()
    Although this coding should just be carrying out the same motion as
    'UnRegisterAddOn' of 'SBOAddonReg.dll' ...

  • Error -18004 with LabVIEW Adapter using LabVIEW Run Time Engine 7.1.1

    Hi to all,
    I am trying to use the LabVIEW Run Time Engine 7.1.1 instead of the Development System for executing VIs in TestStand with the LabVIEW adapter.
    The Problem is that I get the following error, saying that my VIs cannot be executed:
    -18004; An error occurred accessing the LabVIEW Run-Time Engine DLL.
    All my VIs were masscompiled with LabVIEW 7.1.1
    How do I manage this problem, in other words how do I get my VIs in TestStand to run with the LV Run Time Engine?
    Thanks for you help,
    - Caribe -
    PS: I configured the adapter to use the  LabVIEW Run Time Engine 7.1.1. When I check back in the dialog "LabVIEW Adapter Configuration" the selector went back to LV Runtime 7.1??? Thats weird dude!

    Hi Caribe,
    Did you find any solution to this weird behaviour? Even I am facing the same problem! If we set the adapter as LV 7.1.1 runtime engine, it changes back to LV 7.1 runtime engine.
    I am also facing -18002 error after mass compiling LV 7.1 folder and my source code folder.
    If you can share your solution, that would be of great help to me. If i couldnt find any solution, I have planned to revert back to LV 7.1 version.
     Thank you,
    Sasi

  • LabVIEW crashes with ntdll.dll!7C911e58 as the error in debugger.

    I am running a streaming video application (VLC) in LabVIEW as an activeX control. There are 6 separate containers with different streams in each.
    Labview Crashes citing ntdll.dll!7C911e58 as the error in debugger when I try to run the VI. 
    As well, every 4th attempt to run the VI results in the BSOD.
    Does anyone know what I can do to try and fix this serious error?
    Regards,
    Sean

    Which version of LabVIEW do you have?  There wasn't a LabVIEW 7.2.  Did you mean 7.1.1?
    Did you get an error log generated?  That would be useful in diagnosing the problem.  This KB reviews its location:
    http://digital.ni.com/public.nsf/allkb/54E361E3FF477EC186256C320068184F?OpenDocument
    Trey B
    Applications Engineering
    National Instruments

  • Linux labview can't open dll

    When I try to open a Labview driver for a California Instruments power
    supply in Labview for Linux, a dialog box appears and looks to be
    searching for a dll. I browse to the dll, but but the dialog box just
    re-appears like it did not find it. If I cancel, the vi comes up with
    errors saying it can't find a function in the dll. I do a nm on the dll
    and it shows there are no symbols in the dll. Am I not able to use this
    dll under Linux? Is there a way around this? Any help would be great.

    No, compiled objects like DLLs, EXEs are OS specific. You could ask the vendor if they have a Unix/Linux shared library, ask for the source code so it could be recompiled, or use a LabVIEW driver. Most power supplies have fairly simple drivers and there is a LabVIEW driver for the L Series that you might want to use as a template.

Maybe you are looking for