You don't seem to actually be *using* `fixedString` anywhere. Sorry, I should have explained better. Rather than specifying "string" as the type inside the struct types, you need to create instances of the FixedType, and specify the amount of bytes that should be allocated for that field.
So `char Value[8+1]` should become `'Value': FixedString(8+1)`. Also I'm not sure why you're getting a reference to the `myTOUTData` instance on the last line, but I would suspect you would simply inspect the values in the struct at that point to see what the Execute() function put in that space. Hope that helps! On Mon, Sep 28, 2015 at 2:18 AM, Leopoldo Belmonte < [email protected]> wrote: > Hi Nathan, thank you for your answer!!! > > I have modified my code: > > var ffi = require('ffi');var ref = require('ref');var StructType = > require('ref-struct'); > > var fixedString = require('ref-fixed-string'); > > > var TINData = new StructType({ > 'Value': 'string', > 'Type': 'string', > 'Id': 'int', > 'Parity': 'string'}); > > > var TINDataPtr = ref.refType(TINData); > var TOUTData = new StructType({ > 'Cash': 'string', > 'Telephone': 'string', > 'CallType': 'string', > 'CallResult': 'string', > 'Description': 'string'}); > > var TOUTDataPtr = ref.refType(TOUTData); > > var mylibrary = ffi.Library('OurLib.dll', { 'Open' : ['void', ['string']], > 'Execute' : ['void', [TINDataPtr, TOUTDataPtr ]], > 'Close' : ['void', ['void']] }); myLibrary.Open('myConnection'); var > myTINData = new TINData(); myTINData.Value = '00000010'; myTINData.Type = > '1'; myTINData.Id = 123; myTINData.Parity = '0'; > > var myTOUTData = new TOUTData(); > var i = mylibrary.Execute(myTINData.ref(), myTOUTData.ref()); > > myLibrary.Close(); > > var pOutputData = myTOUTData.ref(); > > > Now the debug file is filled correctly, but I get this error "Malloced > operator new Allocation failed - process out of memory" in the Execute > method call. Maybe I haven't enough memory for nodejs execution? > > Thank you > Leo > > Il giorno venerdì 25 settembre 2015 02:40:37 UTC+2, Nathan Rajlich ha > scritto: >> >> 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/5320263c-0f36-4322-b95f-6cbc2d0cec85%40googlegroups.com > <https://groups.google.com/d/msgid/nodejs/5320263c-0f36-4322-b95f-6cbc2d0cec85%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- 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/CAN5MXocQ8-7qu8VuKHGdbNGQhYGB58aHLtKE2cW%2B-wxkxp66WQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
