因为DLL中函数的形式参数中要用到多个数组,且这样的函数还有很多个,每个函数中都存放这么多参数的话,如果函数的数量少的话,是可以正确传到mt4的对应函数中。但函数一多,就会遇到麻烦。且这种方法也不好。 我试了用全程变量,但怎么试也不正确。 哪位大侠能帮忙解决这个问题(用全程变量)?谢谢!
不知现在是否已解决。我的解决方法是: 1) 通过函数调用将数据一个一个的传递。 2) 通过内核对象如互斥量来保证多线程安全,在DLL初始化时创建内核对象,DLL销毁时关闭内核对象,winxp以后好像不关闭也行。 3) 增加两函数操作内核对象:enter函数和leave函数。在mt4指标的start函数里面,计算前先调用enter函数,计算结束后调用leave函数。
谢谢! 我对VC++的了解很表面,不知道“内核对象”是什么。 问题是解决了,我的解决办法是:因为函数虽多,但功能都差不多,参数也几乎一样,我就把基本相似的函数在MT4里统一为一个函数(a),里面用一个变量来区分不同的函数(b)。DLL中,在a中引用各个b,各个b在DLL中单独编写即可。
真惭愧,“锁”我也不知道是什么意思,说来也是,对我这么外行的人来说(以前自学的一点TC2.0的东西,套在VC++上),编程确实不容易,很多东西都是在网上查找,再拿来用,能够凑合着解决问题就算数,但花的时间是很多的。希望你能多多指导。
有了DLL后,MT4上遇到的问题基本上都解决了。 现在唯一有点烦的是,用VC++6.0编辑源文件时,可能是文件太大,老是出现电脑假死的问题,过10秒左右又正常了,其它都好。准备把DLL分成2个文件,也许好些。
^_^ 可能不是分成2个文件的问题,也可以试试。好像这种假死是VC6的一个bug,可能你的VC6用了什么插件,或者是那个VC6自动生成的什么信息库。好久没有VC了。我用的是低版本的MinGW。 你看看这2个 VC6假死解决 http://www.uedbox.com/vc6-bug/ VC6 假死问题 http://whatday.blog.51cto.com/6057616/1382563
我说的假死,是出现在文件编辑的过程中,而不是出现在编译过程中。 一开始文件较小时 ,没有这现象,文件渐渐增大后,才慢慢出现这问题的。 在VC里每改动几个字符,都会出现此问题。 好在我是把文件在MT4中调整好后,再COPY到VC里,要是在VC里修改或编辑,那一定受不了。
^_^ 做下面的实验前,先备份你的项目。 试着关闭 Generate browse info。在编译参数设置那里。 应该在 主要通过VC的菜单项Project->Settings->C/C++那里,在1)General那里,我没VC,你自己找找看,应该是顾名思义的。 参考这个: http://www.cppblog.com/xpzhou/archive/2007/06/08/25807.html 另外,你单个源文件大概多少行代码?或者说多大?
另外,你VC6的环境是怎样的?有没有装什么插件? 如果是中文版,那么换个英文版试试看。 参考这个 C++6.0,动不动就假死,怎么办? http://www.ghoffice.com/bbs/read-htm-tid-80367.html
英文版的VC6打SP6补丁了吗?或者说下载的版本已经集成SP6补丁? ^_^ 单个源文件21000行是有点夸张哈。不过我见过更多的,好像也没这情况。 ^_^ 应该是某个智能选项的问题,如自动完成、拼写检查、VC助手Visual Assist X插件之类的问题,你google一下,然后禁用这些智能选项试试看。 另外,建议先清理obj之类的项目中间文件。 机器内存是多少?一般而言,如果不是win7,那么2G左右的内存也行了。如果是现在的机器,内存应该不是问题。 ^_^ 如果是win7,那么将VC6装在虚拟机WinXP或者windows server 2003上试试看。 ^_^ 或者换个编辑器,开源的编辑器很多的。 ^_^ 实在不行,几秒钟的话,就当是磨性子好了。
我的办法是 有个专门负责传递参数的函数,把数据复制设置到DLL的动态全局变量,其他基本就不用传递参数了。 获取结果、删除释放DLL的全局变量内存, 类似都用专门函数。 也就是说,现在调用分多步 1 传递参数,成功才能下步; 2 调用各种处理,获取各种结果......; 3 最后不用了 , 调用函数,删除释放DLL的全局变量内存 1,2可反复进行