node.js — C ++ LoadLibrary завершается ошибкой при загрузке dll, сгенерированной vs2010

Во-первых, у меня есть add.dll который генерируется vs2010 IDE,

add.h:

#define _EXPORT
#ifndef _EXPORT
#define EXPORT __declspec(dllimport)
#else
#define EXPORT __declspec(dllexport)
#endif
EXPORT int add(int a,int b);

add.c:

#include "add.h"
int add(int a,int b) {

return a+b;
}

И затем, я хочу вызвать этот add.dll в моем другом pdf.c программа:

#include "add.h"#include <windows.h>
#define _EXPORT
// #pragma comment(lib,"add.lib")
// __declspec(dllimport) int add(int a,int b);
typedef int (*DLLFUN)(int a, int b);

DLLFUN fun;

EXPORT int dosome(int a,int b) {
HMODULE hdll = LoadLibrary("add.dll");
if(hdll!=NULL){
// DLLFUN add = NULL;
fun=(DLLFUN)GetProcAddress(hdll,"add"); //----here find the add fun

return fun(a,b);
}
return 0;

}
И я создаю и связываю этот pdf.c с инструментами vs2010, но не с самой IDE vs2010:

cl.exe /D_USRDLL /D_WINDLL C:\Users\liz\Desktop\pdfdll\Release\pdf.c /link /DLL /OUT:C:\Users\liz\Desktop\pdfdll\Release\pdf.dll

Тогда получить pdf.dll который я хочу назвать с помощью Узел-FFI с помощью node.js:

var ffi = require('ffi');
var ref = require('ref');var intPtr = ref.refType(ref.types.int);

var libm = ffi.Library(__dirname+'\\pdf.dll', {
'dosome': [ 'int', [ 'int','int' ] ]
});

var a = libm.dosome(1,5);
console.log(a);

В результате в файле console.log выводится 0, что означает, что в программе pdf.c он не может загрузить библиотеку add.dll.

Но что странно, что когда я собираю и связываю add.c и add.h с помощью инструмента vs2010, как описано выше, он выводит правильный ответ 6.

Итак, я попытался найти то, что эти два метода отличаются. Я использую Зависимость Уокер найти, что сборка dll с IDE vs2010 зависит от MSVCR100.DLL а также KERNEL32.DLL в то время как сборка dll с cl.exe зависит только от KERNEL32.DLL.

В реальной ситуации у меня есть более сложная программа, которая экспортирует файл dll и .h, используя IDE VS2010. Я должен сделать некоторую работу, чтобы вызвать эту DLL в моей программе node.js. Где я не прав и что я могу сделать?

2

Решение

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

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


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