node.js — Как использовать DLL C ++ в Node с помощью SWIG?

Я пытался получить ослов к этой функции из DLL:

// файл Mathematiques.cpp

int WINAPI **multipli**(int a , int b)
{
return a*b;
}

Для информации :
// файл WinDef.h

#define WINAPI      __stdcall

Для этого я пишу код на C ++, который загружает мою DLL:

// Файл NodeJS.cpp

HMODULE hDLL=LoadLibrary("D:\\1_testfiles\\Xpcom\\FonctionMath\\Debug\\FonctionMath.dll");

int Test(int a, int b){

if(!hDLL)
{
printf("Erreur de LoadLibrary");
return 1;
}

DLL_Function_multipli pfn_multipli;

pfn_multipli =(DLL_Function_multipli)GetProcAddress(hDLL,"multipli");

if (!pfn_multipli)
{
FreeLibrary(hDLL);
return 1;
}

return pfn_multipli(a,b);

}

А до этого я объявил свою функцию в файловом интерфейсе:

extern int Test(int a, int b);

Наконец, я создаю свой компонент и пытаюсь запустить этот скрипт из Node:

var NWMatrix = require("./build/Release/NWMatrix");

var v=NWMatrix.Test(1,9);

console.log("Multiplication Result = "+v);

Это не работает, но когда я попробовал тот же скрипт из Node-Webkit, он работает нормально.

Я думал, что это вопрос версии другого узла.

Но я использую Node 0.10.33 в моем компьютере и Node-webkit 0.8.6, которые используют Node 0.10 …

Почему этот скрипт не работает?

Любая помощь была бы очень ужасна!

РЕДАКТИРОВАТЬ :

Я думаю, что теперь это не вопрос DLL, но мой код cpp не так …

Я объясню себя:

Я запускаю этот скрипт с узлом:

var NWMatrix = require("./build/Release/NWMatrix");

console.log("\n");
row=25;
column=25;
NbrBoucle=4;

for(var k=0;k<NbrBoucle;k++){

console.time('Matrice'+row+"*"+column);
console.log("Row number=" + row);
console.log("column number=" + column);
console.log(k);

NWMatrix.MatrixCreate(row,column);
NWMatrix.Transpose();
NWMatrix.MultiplierParUnScalaire(42.5);

console.timeEnd('Matrice'+row+"*"+column);row=row*10;
column=column*10;
NWMatrix.DestroyMatrice();
h=NWMatrix.Test(8,9+k);
console.log("Mutliplication Result ="+h);
console.log("\n");
};

var v;
v=NWMatrix.Test(5,9);

console.log("Multiplication Result = "+v);

В этом коде я делаю ссылку на этот код:

#include "boost/numeric/ublas/matrix.hpp"#include "boost/numeric/ublas/io.hpp"#include "mathematiques.h"#include <windows.h>
#include <stdio.h>

boost::numeric::ublas::matrix<double> v;int MatrixCreate(int row, int column) {
using namespace boost::numeric::ublas;
matrix<double> m (row,column);
int i=0;
for(i=0;i<m.size1();i++){
int j=0;
for(j=0;j<m.size2();j++){
m(i,j)=rand();

}
}
v=m;

return 0;
}

double RenvoiUnCaractere(int row, int column){

return v(row,column);

}

void Transpose(){

v=trans(v);

}

void MultiplierParUnScalaire(double Scalaire){

v=Scalaire*v;

}

void DestroyMatrice(){

v.clear();

v.resize(1,1);

}

Когда я комментирую эту строку сценария:

NWMatrix.MatrixCreate(row,column);

Узел выполнит весь код и напечатает в консоли:

Результат умножения = 45

Результат последней строки скрипта.

Но когда я не комментирую строку:

NWMatrix.MatrixCreate(row,column);

Узел прекратит выполнение скрипта в конце цикла.

Я думаю, что это вопрос CPP, возможно.

Я не уничтожаю должным образом матрицу объектов. Я сосредоточусь на этом вопросе в ближайшие дни ..

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]