编译一个老的mfc项目

编译一个老的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自动分配内存的要修改值只能通过传出来的指针修改里面的值

cocos的plist转egretjson

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// cocos plist 动画转 egret json文件
function p2e(farr){
for(let f of farr){
fs.readFile(bpath + f, (err,bu)=>{
if(err){
console.log(err);
return;
}
let jn = xml.xml2js(bu, {compact: true});
console.log(jn);
let ejn = {mc:{
run:{frameRate:24,labels:[],frames:[]}
},
file:jn.plist.dict.dict[1].string[0]._text,
res:{}};
let fn = "", frame = 0;
console.log("basefile");
for(let i=0;i<jn.plist.dict.dict[0].key.length;i++){
let pos = jn.plist.dict.dict[0].dict[i].string[0]._text;
pos = pos.substr(2, pos.length-4).replace("},{",",").split(",");
console.log(jn.plist.dict.dict[0].key[i]._text, pos);

ejn.res[jn.plist.dict.dict[0].key[i]._text] = {x:pos[0],y:pos[1],w:pos[2],h:pos[3],r:("true" in jn.plist.dict.dict[0].dict[i])};

pos = jn.plist.dict.dict[0].dict[i].string[2]._text;
pos = pos.substr(2, pos.length-4).replace("},{",",").split(",");
ejn.mc.run.frames.push({res:jn.plist.dict.dict[0].key[i]._text,x:pos[0],y:pos[1]});

if(fn && jn.plist.dict.dict[0].key[i]._text.indexOf(fn) == 0){
continue;
}else{
fn = jn.plist.dict.dict[0].key[i]._text;
if(ejn.mc.run.labels.length > 0){
ejn.mc.run.labels[ejn.mc.run.labels.length-1].end = ejn.mc.run.frames.length-2;
}
}
let pl = fn.lastIndexOf("_");
if(pl != -1){
fn = fn.substr(0, pl);
}
ejn.mc.run.labels.push({name:fn,frame:frame,end:ejn.mc.run.frames.length-1});
frame = ejn.mc.run.frames.length;
if(frame > 20) break;
}
console.log(JSON.stringify(ejn));
});
}
}

拖动的简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//代码示例
this.box = new egret.DisplayObjectContainer();
this.box.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.boxBegin, this);
this.box.addEventListener(egret.TouchEvent.TOUCH_END, this.boxEnd, this);
//添加几个子元素
for(let i=0;i<4;i++){
this.itemList[i] = new sitem((Math.random()*base).toFixed());
this.itemList[i].x = Math.random()*(this.width-90);
this.itemList[i].y = Math.random()*(this.height-90);
this.box.addChild(this.itemList[i]);
}
/** 盒子触摸开始 */
public boxBegin(e:egret.TouchEvent):void{
console.log("boxBegin", e.touchPointID);
for(let i=0;i<this.itemList.length;i++){
if(this.itemList[i].hitTestPoint(e.stageX, e.stageY)){
this.itemList[i].touchId = e.touchPointID;
this.itemList[i].offsetX = e.stageX - this.itemList[i].x;
this.itemList[i].offsetY = e.stageY - this.itemList[i].y;
break;
}
}
this.box.addEventListener(egret.TouchEvent.TOUCH_MOVE, this.boxMove, this);
}
/** 盒子上开始移动 */
public boxMove(e:egret.TouchEvent):void{
console.log("boxmove", e.touchPointID);
for(let i=0;i<this.itemList.length;i++){
if(this.itemList[i].touchId == e.touchPointID){
this.itemList[i].x = e.stageX - this.itemList[i].offsetX;
this.itemList[i].y = e.stageY - this.itemList[i].offsetY;
break;
}
}
}
/** 盒子触摸结束 */
public boxEnd(e:egret.TouchEvent):void{
console.log("boxEnd", e.touchPointID);
for(let i=0;i<this.itemList.length;i++){
if(this.itemList[i].touchId == e.touchPointID){
this.itemList[i].touchId = -1;
//检查是否跟其它数字碰撞
for(let j=0;j<this.itemList.length;j++){
if(j == i) continue;
if(Math.sqrt(Math.pow(this.itemList[i].x-this.itemList[j].x,2) + Math.pow(this.itemList[i].y-this.itemList[j].y,2)) < 90){
console.log("hit", this.itemList[i].getNum(), this.itemList[j].getNum());
}
}
break;
}
//if(this.itemList[i].touchId != -1) return;
}
this.box.removeEventListener(egret.TouchEvent.TOUCH_MOVE, this.boxMove, this);
}