В dll определена функция:
#define _DLLMAINCPP
#if defined(WIN32) || defined(_WIN32)
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
#ifdef __cplusplus
extern "C" {
#endif
EXPORT int myfunc(char* a)
{
// Do something to change value of "a"
}
#ifdef __cplusplus
}
#endif
Как передать в нее указатель на строку из node-ffi, а потом продолжить работать с этой измененной строкой в nodejs?
Необходимо передать объект Buffer
:
//use ffi and ref to interface with a c style dll
var ffi = require('ffi');
var ref = require('ref');
//load the dll. The dll is located in the current folder and named customlib.dll
var customlibProp = ffi.Library('customlib', {
'myfunction': [ 'void', [ 'char *' ] ]
});
var maxStringLength = 200;
var theStringBuffer = new Buffer(maxStringLength);
theStringBuffer.fill(0); //if you want to initially clear the buffer
theStringBuffer.write("Intitial value", 0, "utf-8"); //if you want to give it an initial value
//call the function
customlibProp.myfunction(theStringBuffer);
//retrieve and convert the result back to a javascript string
var theString = theStringBuffer.toString('utf-8');
var terminatingNullPos = theString.indexOf('\u0000');
if (terminatingNullPos >= 0) {theString = theString.substr(0, terminatingNullPos);}
console.log("The string: ",theString);
Ссылка на решение:
https://stackoverflow.com/questions/32134106/node-ffi-passing-string-pointer-to-c-library
Виртуальный выделенный сервер (VDS) становится отличным выбором
На каникулы задали лабораторную работу (сделать программу, которая будет хранить метаданные файла, и текст содержащийся в нем, и различные...