From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Passing Reference to Struct to DLL (Call Library Function)

Solved!
Go to solution

I have two functions written in C that takes reference to a struct.

 

Declarations:

IpAddress_Parse(IpAddress* address, const kChar* text)

 

ConnectIpAddress(connection, const kIpAddress* address)

 

typedef struct IpAddress
{
int version; 
unsigned char address[16];
} IpAddress;

 

 

Snippet:

void main(int argc, char **argv)

{

IpAddress ipAddress;

 

IpAddress_Parse(&ipAddress, "12.0.1.10");

ConnectIpAddress(connection, &ipAddress);

}

 

I am trying to convert the above to LabVIEW, but have trouble. I have tried to create a Cluster in LV and parse out data from IpAddress_Parse() and pass it back to ConnectIpAddress() as "Adapt to Type" to no avail. Even if I artificially construct a Cluster to pass to ConnectIpAddress() I would have error 1097 from LabView. My cluster included an int and a byte array which follows the typedef struct of IpAddress.

 

Please provide some pointers as what I am doing wrong. Thanks in advance.

0 Kudos
Message 1 of 3
(2,705 Views)
Solution
Accepted by topic author Johnny3D

Please show your LabVIEW code. The IpAddress cluster should contain a 32-bit integer value, and a nested cluster containing 16 U8 values. You cannot replace a fixed-length C array with a LabVIEW array; you must use a cluster containing the same number of elements instead.

Message 2 of 3
(2,696 Views)

Hi nathand,

 

That was the culprit! Problem solved when I used cluster of elements to present array from C.

 

Thanks for your help!

0 Kudos
Message 3 of 3
(2,659 Views)