Click here to Skip to main content
16,018,460 members
Please Sign up or sign in to vote.
4.00/5 (2 votes)
See more:
So I generated a .dll from a LabView vi. The variable I'm trying to use is declared as follows:

typedef struct {
	long dimSize;
	LStrHandle elt[1];
	} TD1;
typedef TD1 **TD1Hdl;


The function I want to call is:
void __cdecl getFileList(TD1Hdl *SpecResults);

where, according to LabView, SpecResults is an output variable that I can use (it is an array in the vi).

I have gotten it to compile several different ways, but no matter what I do, I can't retrieve the data I need (dimSize and elt).

Here is the closest I've gotten:
int main(int argc, char *argv[])
{
   TD1 *tdptr = (TD1 *)malloc(sizeof(long) + (6 * sizeof(LStrHandle))); // the array I'm getting has 6 elements
   TD1Hdl tdhdl = &tdptr;

   SetupWO();
   getFileList(&tdhdl);

   return 0;
}


Debugging with watches for tdptr and tdhdl says "symbol not found" for both.

SetupWO() starts the main vi, getFileList is a subvi.

Thanks in advance for any help.

EDIT:
Adding the lines
C#
if(tdptr = NULL)
   return 0;
else
   printf("memory allocated");

right after tdptr is declared gives dimSize = ??? and elt = 0x00000004, which I guess is a little better than what I was getting? I don't know, I need to get this figured out as I've been working on it all week and I can't make any more progress until I do. Any help is greatly appreciated...
Posted
Updated 10-Jun-11 6:04am
v3

1 solution

Unfortunately didn't get any answers on these boards but I have it more or less figured out. I'll post the code in case anyone has a similar problem in the future. It's separated into classes now so it looks a little different.


wrapper.h:

XML
#include <ansi_c.h>
#include <labviewLib.h>
#include <iostream>
#include <stdlib.h>
#include "createMPTfile.h"

using namespace std;

class wrapper
{
public:
    void run();
    ~wrapper(){delete create;}

private:
    void LStrToCStr(LStrHandle lstr, char *cStrBuff, long buffLen);

    TD1 tdptr;
    TD1Hdl tdhdl;
};



wrapper.cpp:

C#
#include "wrapper.h"

void wrapper::run()
{
    tdhdl = NULL;

    SetupWO();
    getFileList(&tdhdl);

    tdptr.dimSize = (*tdhdl)->dimSize;
    for(int i = 0; i < tdptr.dimSize; i++)
    {
        tdptr.elt[i] = (*tdhdl)->elt[i];

        char atpString[256];
        LStrToCStr(tdptr.elt[i], atpString, 256);
        printf(atpString);
        printf("\n");
    }
}

void wrapper::LStrToCStr(LStrHandle lstr, char* cStrBuff, long buffLen)
{
    int32 len = LHStrLen(lstr);
        if(len >= buffLen)
            len = buffLen - 1;

    memcpy(cStrBuff, LHStrBuf(lstr), len);
    cStrBuff[len] = 0;
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900