> Could it be possible that LabVIEW 7.0 is not prepending the length
> correctly to the blank buffer string when using the Pascal String
> Pointer? Is there any way to check what the Pascal String Pointer
> value and contents are when it is executed in the Call Library Node
> VI?
> 
> Here's the configuration I'm using for the DLL:
> 
> void hasp(unsigned long service, unsigned long seed, unsigned long
> lptnum, unsigned long pass1, unsigned long pass2, unsigned long *Par1,
> unsigned long *Par2, unsigned long *Par3, PStr Par4);
> 

You don't give much information about how this fails to work?  LV grew 
up on the Mac, and uses pascal strings all over the place internally. 
Anything is possible, but I think that the pascal string probably gives 
a 256 byte buffer with the contents of the input string copied in and 
the size set accordingly.  If you can set a breakpoint in the DLL, even 
in assembly, it shouldn't be too hard to spot it, especially if you pass 
in a unique input string.

As for generating a blank string buffer, you can use this VI I suppose, 
but a constant or any other string will work as long as it is of the 
expected length.  And this is the most common mistake made using the 
Call Library Node.  LabVIEW has no idea how big the buffer is supposed 
to be, or even if it is an input/output, versus an input, versus an 
output.  The C language leaves that up the the programmer of the DLL and 
the user of the DLL.  It is expected that the caller of the DLL allocate 
the right buffer size, and LV cannot help here.  If you don't pass in a 
big enough buffer, the DLL will overwrite the buffer and corrupt other 
memory or get an access fault, depending on the layout of memory.  Also, 
check if any of your input parameters describe the buffer size -- 
telling the DLL how much data you want returned, or telling it the size 
of the buffer.  If you are inadvertantly telling it you only want two 
bytes, that might explain what you are seeing.

Sorry I can't be more helpful.  If you have more problems, please 
provide more information about the failures you are seeing.

Greg McKaskle


Reply via email to