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 nodejs+unsubscr...@googlegroups.com. To post to this group, send email to nodejs@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/5320263c-0f36-4322-b95f-6cbc2d0cec85%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.