我有C ++代码,它调用Mathworks中的例程。该代码在控制台应用程序中正常运行。但是,当我使用相同的代码创建Windows窗体应用程序时,我得到链接器错误2019指向Mathworks例程。我比较了工作和错误生成项目(MS VS2010)之间的链接器属性表 - 所有路径和库目标都是相同的。在Windows窗体应用程序中,我是否需要对外部例程进行一些特殊处理?谢谢你的帮助。
以下是8个链接器错误之一的文本:
错误26错误LNK2019:未解析的外部符号" extern" C" char * * __clrcall matGetDir(类MATFile *,int *)" (?matGetDir @@ $$ J0YMPEAPEADPEAVMATFile @@ PEAH @ Z)在函数中引用 " int __clrcall AnalyzeMatFile(wchar_t const *,class std :: basic_ofstream> *,类 std :: basic_ofstream> *,类 std :: vector,class std :: allocator>,class std :: allocator,class std :: allocator> > > &安培;)" (?AnalyzeMatFile @@ $$ FYMHPEB_WPEAV?$ basic_ofstream @ _WU?$ char_traits @ _W @ STD @@@ STD @@ 1AEAV?$ @矢量V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ V'$分配器@ V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ 2 @@ 2 @@ž )C:\ Users \ TAS_PB_Usr1 \ 00_TAS \ 500_Prod_Dev \ 160302_MatAloguer \ ReadWorkspaceVars \ ReadWorkspaceVars \ Functions.obj ReadWorkspaceVars
谢谢你们的回答。 是的,参考了Matlab库。
我按照建议尝试了#pragma指令(现已注释):
//#pragma managed(push, off)
#include "engine.h"
#include "mat.h"
//#pragma managed(pop)
确实指定un-managed更改了来自" __ clrcall"的链接错误消息。到" __ cdecl" (相同数量的错误)。但是我发现"运气"将平台从32位更改为64位(此PC为64位)消除了错误。我不明白(特别是为什么控制台应用程序可以工作,而表单应用程序没有) - 并希望 - 但我很高兴现在代码构建。谢谢你的帮助。