把一个简单的m代码编译成C++接口的DLL,然后在C++
程序中调用。为冲明了简单起见,这里的C++程序是一个Win32 Console程序,而不是Windows图形界面的程序,不过不妨碍我们的讨论。\x0d\x0a\x0d\x0a下面是这个例子用到的m代码。它定义了一个名为myadd2的函数\x0d\x0a\x0d\x0afunction [y,z] = myadd2(a, b)\x0d\x0a\x0d\x0a% dummy function, just to demonstrate the idea\x0d\x0a\x0d\x0ay = a+b\x0d\x0a\x0d\x0az = a+2*b\x0d\x0a\x0d\x0aend\x0d\x0a复制代码\x0d\x0a首先把这个函数编译成C++接口的DLL。为此,我们需要先设置MATLAB编译器。衫判闷具体做法是在MATLAB命令行执行“mbuild -setup”。然后用下面这行命令把myadd2函数编译成一个C++接口的DLL:\x0d\x0a\x0d\x0amcc -W cpplib:libmyadd2 -T link:lib myadd2\x0d\x0a复制代码\x0d\x0a结果,我们将会得到包含libmyadd2.dll,libmyadd2.ctf,libmyadd2.h,libmyadd2.lib等在内的一些
文件。接下来我们只需要这四个文件。\x0d\x0a\x0d\x0a然后在VS2005中创建一个Win32 Console的VC++工程,我在测试时取名为testmyadd2_r2007b。把以上四个文件拷贝到VC++工程的源代码所在目录。\x0d\x0a\x0d\x0a接下来设置VC++,让它能找到MATLAB接口函数的定义及连接库函数。可以有两种或弯设置方式:一种是改VS2005中关于VC++的设置,这样的好处是每个新的工程都能自动获得这个设定;而另一种是只改当前工程的设置,也就是设置只对该工程有效。这里用后一种方式。\x0d\x0a\x0d\x0a在VS2005中打开工程testmyadd2_r2007b,选择菜单“Project-->Properties,在出来的对话框上,把MATLAB提供的include路径加到VC++的头文件搜索路径。\x0d\x0a\x0d\x0a然后把相应的lib所在目录加到linker的额外搜索路径上\x0d\x0a\x0d\x0a接下来,告诉VC++,我们的这个程序需要连接到另外两个额外的库函数:libmyadd2.lib和mclmcrrt.lib。中间用空格隔开\x0d\x0a\x0d\x0a最后则是程序代码。这个程序只有一个main函数,其完整代码附在下面给大家参考。\x0d\x0a\x0d\x0a#include "stdafx.h"\x0d\x0a\x0d\x0a#include \x0d\x0a\x0d\x0a#include "mclmcr.h"\x0d\x0a\x0d\x0a#include "mclcppclass.h"\x0d\x0a\x0d\x0a#include "libmyadd2.h"\x0d\x0a\x0d\x0aint _tmain(int argc, _TCHAR* argv[])\x0d\x0a\x0d\x0a{\x0d\x0a\x0d\x0astd::cout
回答于 2022-12-14matlab调用dll,虚游游错误提磨贺示xx.dll 不是有效的 Win32 应用程序
出现该问题多半是VS生成的dll文件与matlab不匹配,具体的方法如下:
1)先在matlab的安装文件夹的bin文件中查看自己安装的matlab是64位还是32位;
如果看到win64说明matlab的安装版本是64位的。
2)打开VS2015,新建项目–win32控制台应用程序–输入项目名称–选择应用程序类型为DLL–附加项目为空项目,点击完成,会出现以下的界面:
在debug旁边的的选项中选择x64,然后放入你要编译的文件进行编译就可以差销了。
问题原因
出现此问题是由于Windows 的system32目录下两个DLL文件版本太低,这两个文件是SSLEAY32.DLL和LIBEAY32.DLL。
这两个文件在MATLAB安装目录的\bin\win64目录下也有,\bin\win64这个目录是在添加到了系统的PATH变量里了的。但是Matlab编译后的exe程序在运行时,system32目录有高的优先级,会使用斗前神system32目录下的这两个文件,导致初始化错误,直接闪悔饥退。
解决方法
知道了此原因,有两种解决方法:
(1)将Matlab的安装目录 \bin\win64下的SSLEAY32.DLL和LIBEAY32.DLL复制到windows的system32目录下,覆盖旧版本的文件。但是这样可能导致使用这两个DLL文件的其他程序出现问题。
(2)将Matlab的安装目录 \bin\win64下的SSLEAY32.DLL和LIBEAY32.DLL文件复制到自己编译后的exe同目录下,这样exe文件在运行时就是找自己目录下的空亏这两个DLL文件,而不会使用windows\system32目录下的DLL文件。
---------------------
原文:https://blog.csdn.net/hongandyi/article/details/79427078
评论列表(0条)