matlab c++ 混合编程的一个问题

操作系统 win xp sp3

matlab 2010a

matlab编译器  msvc6.0

调用dll的环境   vs2010

 

在matlab下使用mcc命令生成了动态链接库dll文件,向vc工程中加入了相应的库和目录,把生成dll时同时生成的.h和.cpp文件加入了工程,在没有调用函数的情况下编译,产生了下面错误:

1>c:/documents and settings/zshtang/桌面/videoplatform/pose_estimate.cpp(173): error C2491: 'pose_estimate_tangzesheng' : definition of dllimport function not allowed

 

 

出错代码:

 

LIB_pose_estimate_CPP_API void MW_CALL_CONV pose_estimate_tangzesheng(int nargout, mwArray& T, mwArray& T_stickimgcoor, const mwArray& base_dir, const mwArray& img_dir, const mwArray& img_number, const mwArray& bb) { mclcppMlfFeval(_mcr_inst, "pose_estimate_tangzesheng", nargout, 2, 4, &T, &T_stickimgcoor, &base_dir, &img_dir, &img_number, &bb); }
注:代码是由matlab编译器自动生成,并非本人所写。

如果有人遇到过类似问题,帮忙说下解决办法,谢谢!

 

 

 

查找各种说法尝试无效后,在微软的网站处找到一个解释,参考如下网站:

http://support.microsoft.com/kb/815647/en-us?fr=1

 

在这个网页里有这样的描述:

 

You cannot apply the __declspec(dllimport) keyword to implement a function. For example, when you try to define data members (including static data members and functions) as dllimport functions, you receive the following Compiler C2491 error message:

'identifier' : definition of dllimport function not allowed
我理解为不能向动态链接库中引入静态数据成员或静态函数,否则会导致出现前面的错误。
function [T T_stickimgcoor] = pose_estimate_tangzesheng(base_dir, img_dir, img_number, bb,fghigh_params, parse_params_Buffy3and4andPascal, addinf_params_Buffy3and4andPascal, pm2segms_params) %%load('env.mat'); [T T_stickimgcoor] = PoseEstimStillImage(base_dir, img_dir, '%06d.jpg', img_number, 'ubf', bb, ... fghigh_params, parse_params_Buffy3and4andPascal, addinf_params_Buffy3and4andPascal, pm2segms_params, true); end
我通过注释上边的matlab函数文件中的 load('env.mat') [加载训练数据],然后重新生成动态链接库,再次重复前边的过程,bug消失了。呵呵~   但麻烦也来了, 不能通过matlab直接加载训练数据,就只能自己来动手加载了。这事个复杂的工作,但只能硬着头皮干了。呵呵~

你可能感兴趣的:(编程,C++,function,matlab,dll,编译器)