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.
For more options, visit https://groups.google.com/d/optout.