LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

DSGetHandleSize() crashes LabVIEW

 

The following crashes LabVEW every time. Similar simple code with the other functions also crashes (e.g. DSSetHandleSize(), DSDisposeHandle(), etc) What am I doing wrong?

I'm using Windows 10, LabVIEW 2018, and Visual Studio 2017.

 

The C Code:

 

#include <windows.h>
#include "extcode.h"
#define DLL_EXPORT _declspec (dllexport)

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
	    case DLL_PROCESS_ATTACH:
	    case DLL_THREAD_ATTACH:
	    case DLL_THREAD_DETACH:
	    case DLL_PROCESS_DETACH:
	        break;
    }
    return TRUE;
}

DLL_EXPORT uint32_t handle_size(const UHandle h) {
	return DSGetHandleSize(h);
}

 

 

The LabVIEW code:

image.pngimage.png

 

The Result

image.png

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

A cluster is NOT stored in a handle. Only strings and arrays are. So it is not strange that DSGetHandleSize() fatally crashes when given a pointer to a cluster.

 

Right click on your Call Library Node and select "Create .c file...". Then you will see in the resulting *.c file what is really passed to the DLL in terms of C datatypes for your cluster.

 

It will look something like this:

 

#include "extcode.h"

#include "lv_prolog.h"
typdef struct
{
     int32_t elm1;
     int32_t elm2:
} RefnumType;
#include "lv_epilog.h"

uint8_t FunctionName(RefnumType *refnum)
{
}
Rolf Kalbermatter
My Blog
0 Kudos
Message 2 of 2
(1,963 Views)