Я пытался получить ослов к этой функции из 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, возможно.
Я не уничтожаю должным образом матрицу объектов. Я сосредоточусь на этом вопросе в ближайшие дни ..
Задача ещё не решена.