ni.com is currently undergoing scheduled maintenance.

Some services may be unavailable at this time. Please contact us for help or try again later.

LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Calling Shared Library

I hope Someone can help me because I've been struggling with that for at lease 2 weeks.

 

I'm using LabVIEW linux with CentOS 7. trying to access and USB-1408FS-Plus (DAQ) from Measurement computing.

 

I've got the ".so" and ".h" header files but when I try to use the wizard for building the functions it doesn't quite work. So I just thought of making the function manually by entering the parameters.

 

The function in C is:

 UlError ulGetDaqDeviceInventory(DaqDeviceInterface interfaceTypes, DaqDeviceDescriptor daqDevDescriptors[], unsigned int* numDescriptors)

 

UlError is an ENUM

InterfaceTypes is an ENUM

DaqDeviceDescriptor is a type:

struct DaqDeviceDescriptor

{

char productName[64];

unsigned int productId;

DaqDeviceInterface devInterface;

char devString[64];

char uniqueId[64];

char reserved[512];.

};

typedef struct DaqDeviceDescriptor DaqDeviceDescriptor;

 

so I decided to create in LabVIEW a cluster that included an byte Array (ProductName), a U32 integer for ProductID  and so on

 but I think it doesn't like that from I a read on the web shared library doesn't like passing a structure type if it contains an array.

some seemed to say that I need to replace my array of byte by a pointer. How do I do that?

 

any idea?

 

Thanks in advance

0 Kudos
Message 1 of 2
(2,337 Views)

You need to replace the fixed-length arrays with LabVIEW clusters containing the same number of elements of the correct type. So, if you have a cluster representing a DaqDeviceDescriptor, it should contain as elements:

a cluster of 64 U8 for productName

a U32 (probably) for productId

a cluster of 64 U8 for devString

a cluster of 64 U8 for uniqueId

and something containing 512 bytes for reserved. I think the maximum number of elements in a cluster is 256, and anyway large clusters are unwieldy, so probably easier to make that a cluster containing 64 U64 elements.

 

Alternatively, you can create an array of 64 + 4 + 64 + 64 + 512 = 708 bytes and pass that, then parse out the portions you want afterwards.

 

If you need more assistance, please attach:

- screenshots or snippets of your code, so we can see what's happening without loading LabVIEW (or in case we're working in an older version than you are)

- your actual code, if you don't provide a snippet

- documentation on the functions you're trying to call and the data types you're using

0 Kudos
Message 2 of 2
(2,293 Views)