Rather than using "string" type for those fixed-length strings, use this 
little Type that I whipped up 
(FixedString: https://gist.github.com/TooTallNate/0fe04681493a3c32da51). 
That way, the resulting struct size/alignment will match what it would be 
in C.

On top of that, you're going to need to pass in a reference to the TINData 
and TOUTData structs. The way you have it defined right now you're passing 
the structs in by value, which is wrong. So do `var TINDataPtr = 
ref.refType(TINDataPtr);` and use that for the first argument. Do the same 
thing for the OUT one. And then instead of passing myTINData directly in, 
you would call `myTINData.ref()` to pass a pointer to the struct rather 
than the value.

Hope that helps. Cheers!

On Thursday, September 24, 2015 at 8:24:08 AM UTC-7, Leopoldo Belmonte 
wrote:
>
> Could anyone help me to solve a problem with nodejs and C library (call to 
> some dll methods)?
>
>
> My dll have these methods:
>
> void Open(char *Path);int Execute(TINData *InData,TOUData *OutData);void 
> Close(void);
>
> with these data structures:
>
> typedef struct {
>       char Value[8+1];
>       char Type [1+1];
>       int Id;
>       unsigned char Parity;} TINData
> typedef struct {
>       char Cash[8+1];
>       char Telephone[11+1];
>       char CallType[3+1];
>       char CallResult[2+1];
>       char Description[24+1];} TOUTData
>
> My nodejs code:
>
> var ffi = require('ffi');var ref = require('ref');var StructType = 
> require('ref-struct');
>
>
> var TINData = StructType({
>       'Value': 'string',
>       'Type': 'string',
>       'Id': 'int',
>       'Parity': 'string'});
> var TOUTData = StructType({
>       'Cash': 'string',
>       'Telephone': 'string',
>       'CallType': 'string',
>       'CallResult': 'string',
>       'Description': 'string'});
>
>
>
> var mylibrary = ffi.Library('OurLib.dll', {
>       'Open' : ['void', ['string']],
>       'Execute' : ['void', [TINData, TOUTData]],
>       'Close' : ['void', ['void']]});
>
> myLibrary.Open('myConnection');
> var myTINData = new TINData();           
> myTINData.Value = '00000010';
> myTINData.Type = '1';
> myTINData.Id = 123;
> myTINData.Parity = '0';
>
>

-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/ebc7c39a-f009-4a6a-acd1-db295d6ad750%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to