mql5中的OOP、模板和宏,细微之处和用途 - 页 24 1...171819202122232425262728 新评论 Igor Makanu 2020.02.23 11:51 #231 Vict: 所以它将发挥作用,我想。 不是这样的 #import正在期待一个文件名 胜利。 只是不明白--蜡烛是为了什么而燃烧? 我不想在dll中做连接管理器,在MT4中,由于某些原因,如果我从2个EA中调用2次dll,那么新的dll副本不会在内存中创建(dll有静态对象,在.Net上有包装 - 如果我运行一个dll,那么它就会崩溃,2个不同的文件没有问题)。 所以我想快速地--只要把mylib.dll文件复制到mylib02.dll上,一切都可以顺利进行....。但想在全局范围内声明一个宏置换 [删除] 2020.02.23 11:57 #232 Igor Makanu: 它不是这样工作的 而这看起来是一个错误/失败。请注意最后一个帖子中的PS PS:如果你还是很想,试试name_dll(不带点),也许它能起飞。 Igor Makanu 2020.02.23 12:09 #233 Vict: 而这看起来是一个错误/失败。请注意上一篇文章中的PS MT4的情况不是这样的 MT4只有在运行时才会看到dll本身,而我和你讨论的是--它不被编译器本身所允许,也就是说,编译器会这样通过 #import "mylib.dll" #import #import "mylib" #import 而如果你这样写的话。 #import "mylib.dll" //'mylib.dll' - expressions are not allowed on a global scope #import 也就是说,有一个严格的语法指令#import+一些带引号的字符串--而且都是在一行。 但我不知道为什么我不能用我的组合通过宏替换来替换#import "mylib.dll"。 胜利。 PS:如果你还是很想,试着给name_dll(不带点),也许会有效果。 我不明白为什么我甚至不能用条件编译来构建inludes?- 一切都在MQL中非常原始地运作 ....虽然我希望我只是不理解它 [删除] 2020.02.23 12:27 #234 Igor Makanu: MT4的情况不是这样的 MT4只有在运行时才会看到dll本身,而我和你讨论的是--编译器不会让它通过,也就是说,编译器是这样通过的 而如果你这样写的话。 也就是说,有一个严格的语法指令#import+一些带引号的字符串--而且都是在一行。 但谁知道为什么我不能用宏来代替#import "mylib.dll "的组合? 我不明白为什么我甚至不能用条件编译来构建inludes?- 一切都在MQL中非常原始地运作 ....虽然我希望我只是不理解它 我不知道为什么它对你不起作用,它对我起作用。 #define DD "jkjk.dll" #import DD void fn(); #import 现在只要在不同的EA中设置不同的DD("lib_1.dll"、"lib_2.dll")。 [删除] 2020.02.23 12:32 #235 Vict: 我不知道为什么它对你不起作用,它对我很有效。 现在只要在不同的EA中设置不同的DD("lib_1.dll"、"lib_2.dll")。 对不起,忘记了--我的源码是通过slang预处理器,在µl中传递的--是的,它不起作用。 Igor Makanu 2020.02.23 12:36 #236 Vict: 对不起,我忘了--我的源代码是通过slang预处理程序,以µl的形式传递的--是的,不工作。 一般来说,我已经采取了MQL,所以它将按计划工作。 #ifdef USE_DLL_NUMBER #ifdef USE_DLL_NUMBER02 #import "mylib2.dll" #endif #else #import "mylib.dll" #endif 我在主代码中声明了2个宏置换 #define USE_DLL_NUMBER #define USE_DLL_NUMBER02 ...将它减少到一个宏 USE_DLL_NUMBER02 - 一般来说是类似于适合我的东西 - 我希望将来有需要时能写出 USE_DLL_NUMBER03 , USE_DLL_NUMBER04 -。 Igor Makanu 2020.02.23 13:04 #237 Igor Makanu: ...把它缩减为一个单一的宏 USE_DLL_NUMBER02 - 一般来说是类似于适合我的东西 - 我希望能够写出 USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - 在未来如果需要的话。 一般来说,在蛮力的帮助下,有可能解决这个问题 #ifdef USE_DLL_NUMBER01 #define USE_DLL_NUMBER #endif #ifdef USE_DLL_NUMBER02 #define USE_DLL_NUMBER #endif #ifdef USE_DLL_NUMBER03 #define USE_DLL_NUMBER #endif #ifdef USE_DLL_NUMBER04 #define USE_DLL_NUMBER #endif #ifdef USE_DLL_NUMBER05 #define USE_DLL_NUMBER #endif Seric29 2020.02.23 16:31 #238 为什么mql4不实现一个#if宏,按值工作,你可以创建选择性的对象,如 #define Znah 0 #define PrmI int Peremen=6; #define PrmD double Peremen=3.345; #if Znah//если больше 0 то появится переменная int Peremen PrmI #else PrmD//иначе появится переменная double Peremen #endif 因此,整个后续程序可以用正确的类型进行纠正。 fxsaber 2020.02.25 22:23 #239 我从未遇到过返回错误的表达式。ORDER_TIME_DONE_MSC == DEAL_TIME_MSC 这就是为什么很难根据交易历史对订单执行时间进行统计。 如果我们还能为市场订单匹配ORDER_TIME_SETUP_MSC 的值,那么它对订单来说就没有意义了。 fxsaber 2020.02.26 15:07 #240 这很可能是一个过时的东西。const修饰符并不保证对象不会被改变。struct A { int i; void f( const A &Value ) { Print(Value.i); // 0 this.i = Value.i + 1; Print(Value.i); // 1 } }; void OnStart() { A a; a.f(a); } 有些编译器在这种情况下可能会发出警告。 1...171819202122232425262728 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
所以它将发挥作用,我想。
#import正在期待一个文件名
只是不明白--蜡烛是为了什么而燃烧?
我不想在dll中做连接管理器,在MT4中,由于某些原因,如果我从2个EA中调用2次dll,那么新的dll副本不会在内存中创建(dll有静态对象,在.Net上有包装 - 如果我运行一个dll,那么它就会崩溃,2个不同的文件没有问题)。
所以我想快速地--只要把mylib.dll文件复制到mylib02.dll上,一切都可以顺利进行....。但想在全局范围内声明一个宏置换
它不是这样工作的
而这看起来是一个错误/失败。请注意最后一个帖子中的PS
PS:如果你还是很想,试试name_dll(不带点),也许它能起飞。
而这看起来是一个错误/失败。请注意上一篇文章中的PS
MT4的情况不是这样的
MT4只有在运行时才会看到dll本身,而我和你讨论的是--它不被编译器本身所允许,也就是说,编译器会这样通过
而如果你这样写的话。
也就是说,有一个严格的语法指令#import+一些带引号的字符串--而且都是在一行。
但我不知道为什么我不能用我的组合通过宏替换来替换#import "mylib.dll"。
PS:如果你还是很想,试着给name_dll(不带点),也许会有效果。
MT4的情况不是这样的
MT4只有在运行时才会看到dll本身,而我和你讨论的是--编译器不会让它通过,也就是说,编译器是这样通过的
而如果你这样写的话。
也就是说,有一个严格的语法指令#import+一些带引号的字符串--而且都是在一行。
但谁知道为什么我不能用宏来代替#import "mylib.dll "的组合?
我不明白为什么我甚至不能用条件编译来构建inludes?- 一切都在MQL中非常原始地运作 ....虽然我希望我只是不理解它我不知道为什么它对你不起作用,它对我起作用。
现在只要在不同的EA中设置不同的DD("lib_1.dll"、"lib_2.dll")。我不知道为什么它对你不起作用,它对我很有效。
现在只要在不同的EA中设置不同的DD("lib_1.dll"、"lib_2.dll")。对不起,忘记了--我的源码是通过slang预处理器,在µl中传递的--是的,它不起作用。
对不起,我忘了--我的源代码是通过slang预处理程序,以µl的形式传递的--是的,不工作。
一般来说,我已经采取了MQL,所以它将按计划工作。
我在主代码中声明了2个宏置换
...将它减少到一个宏 USE_DLL_NUMBER02 - 一般来说是类似于适合我的东西 - 我希望将来有需要时能写出 USE_DLL_NUMBER03 , USE_DLL_NUMBER04 -。
...把它缩减为一个单一的宏 USE_DLL_NUMBER02 - 一般来说是类似于适合我的东西 - 我希望能够写出 USE_DLL_NUMBER03 , USE_DLL_NUMBER04 - 在未来如果需要的话。
一般来说,在蛮力的帮助下,有可能解决这个问题
为什么mql4不实现一个#if宏,按值工作,你可以创建选择性的对象,如
因此,整个后续程序可以用正确的类型进行纠正。这就是为什么很难根据交易历史对订单执行时间进行统计。
如果我们还能为市场订单匹配ORDER_TIME_SETUP_MSC 的值,那么它对订单来说就没有意义了。
有些编译器在这种情况下可能会发出警告。