编译一个老的mfc项目

当然这项目是不需要界面的

  • 第一步是最简单的,先什么都不加nodejs的内容修改项目中问题正常编译通过后
  • 添加nodejs的接口使能在外面调到c++项目中
    • 添加回调的hello里面已经了解了
    • 现在就是个传参数的问题了 下面的代码就是能传进来两个参数了
1
2
3
4
5
6
7
8
9
10
size_t argc = 2;
napi_value args[2];
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
assert(status == napi_ok);

if (argc < 2)
{
napi_throw_type_error(env, nullptr, "Wrong number of arguments");
return nullptr;
}
  • 不过添加了这个文件后开始编译报错了
1
2
3
4
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 libcpmtd.lib(newaop.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义
  • 看到有人说lib的顺序问题
1
2
附加依赖库:uafxcwd.lib;LIBCMTD.lib;
忽略特定默认库:LIBCMTD.lib;uafxcwd.lib
  • 没效果变成报其它的错误了,然后又查又修改反正是各种的错误
  • 最后看到包含文件的问题,我就想到了我现加的接口问题是最先编译的可是没有添加afx.h文件的,然后我在新加的问题中添加了afx.h就能正常的编译通过了
    • nodejs插件里面可以直接打印信息用printf函数
    • 通过 napi_create_buffer 创建buffer这个buffer自动分配内存的要修改值只能通过传出来的指针修改里面的值