具体步骤不再复述,需要注意的点为:matlab必须为破解版,否则可能没有deploytool工具箱使用权限。
对于待编译的函数调用了子函数,分两种情况:
(1) 调用自己编写的子函数,这样编译时需要将所有的函数放在同一个文件夹下,这样编译时会自动将被调用的子函数;
(2) 调用了matlab自带的函数,这种无所谓,直接编译就可以了,matlab会自动按照环境变量的设置去寻找库里的子函数。
借助这一结论,作者机智地将newff.m拷贝到了当前编译工程目录下,从而成功调用神经网络工具箱。
在VS调用.dll文件中的函数时,输入输出都需要进行数组MWArray封装。
值得一提的是,由于程序最终需要打包给用户使用,此处的connectiontString不能写成固定值,必须改成从配置文件(.config)中读取,具体操作如下所示。
此处的bug最多,Oracle数据库的运行对配置要求特别苛刻,而用户的环境又各式各样,导致了各种棘手的问题。
本项目采用直接打包bin\Debug文件的方式,做成绿色免安装版。首先在线制作图标文件(.ico),接着打开C#项目的属性,对生成程序集的名称和图标进行更换,最后保存设置,运行项目即可。
一个是.NET Framework,版本与VS项目的目标框架版本一致,另一个是MCR(MATLAB Runtime)。如果没有安装数据库,还需要Oracle Instant Client,具体如下:
在将软件安装到用户电脑上后,一直连不上数据库,这是遇到的最大问题。首先是在有数据库的服务器(windows server2008)上无法运行,推测可能是Oracle版本不一致,以及一些配置原因。其次是在没有装数据库的电脑(win7)上,在安装了oracle client后也一直无法连接,报错“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”。最后从Oracle官网下载了“instantclient-basic-win64-10.2.0.5.zip”,问题才得以解决。
在对Oracle进行读写测试时,发现了中文字符全变成了“?”,黑人问号脸。一番研究,发现原来还得手动配置环境变量。
题外话,在进行Debug找错时,将try~catch得到的的Exception写入log日志是一个不错的方法,非常方便处理错误,且不会让程序中断运行。