精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品独创开源文章,禁止任何形式的转载和任何形式的非法使用,侵权必究
在PS的SDK里,提供有2个例子,MFCPlugIN是Filter类型例子,使用了MFC,而AutomationFilter就Automation类型例子,它没有使用MFC。现在为了在Automation类型里使用MFC,对2者代码进行了混合,下面说明些操作步骤。
MFC的使用要包含一些头文件,这些头文件在sdtafx.h里包含,所以移植就主要把这个头文件从MFCPlugIN项目移植到AutomationFilter,另外还移植了一个对话框头文件。
遇到了CRect类型冲突问题,因为MFC环境和PS SDK环境都定义了这个类型。
另外链接也失败了,库好像有冲突。
把MFCPlugIN主函数内容改成AutoPluginMain(),对照头文件定义那些未定义。
两个头文件AutomationFilter.h,AutomationFilterUI.h移到MFCPlugIN中,注释掉其中不需要的东西,改动包含头文件名。
启动调试,查看错误改动。
主要的环境不懂,改来改去没有头绪,也不知道具体的错误是什么导致的,只知道改错误的本身,结果越改错误越多。
遇到如下问题:
error LNK2005: _DllMain@12 已经在 PIDLLInstance.obj 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) 已经在 LIBCMTD.lib(new2.obj) 中定义
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义
1> 正在创建库 .\..\..\Output\Objs\MFCPlugIn\Debug/MFCPlugIn.lib 和对象 .\..\..\Output\Objs\MFCPlugIn\Debug/MFCPlugIn.exp
1>PIUActionUtils.obj : error LNK2019: 无法解析的外部符号 "void __cdecl AliasToFullPath(char * *,char *,long)" (?AliasToFullPath@@YAXPAPADPADJ@Z),该符号在函数 "void __cdecl DumpInfoFromDescriptor(struct _ADsc * const,class std::basic_ofstream<char,struct std::char_traits<char> > &)" (?DumpInfoFromDescriptor@@YAXQAU_ADsc@@AAV?$basic_ofstream@DU?$char_traits@D@std@@@std@@@Z) 中被引用
1>..\..\Output\Win\Debug\AutomationFilter.8li : fatal error LNK1120: 1 个无法解析的外部命令
PS插件是特殊环境,使用另外环境的代码,难上加难。