从dll中调用函数并返回结果 - 页 5 1234567 新评论 Forex Trader 2005.07.31 19:37 #41 受保护是好事,严重贫困是坏事。而有了调用dll的能力,其安全性如何呢?:)当然,你可以禁止调用dll,等等,等等。FindFirst和FindNext我需要的是,当我有一个想法,将一堆任务的执行发送到专家顾问的目录文件中,这样它就可以查看它们并执行。结果发现这很荒唐。 MetaQuotes 2005.07.31 19:52 #42 而有了调用dll的能力,其安全性如何?:) 只要看看设置--一切都被禁用了(DLLs默认是禁用的)。 Forex Trader 2005.07.31 19:59 #43 我在插入我的dll时意识到了这一点。只是,如果你被允许导入 dll,你说的是什么样的保护? MetaQuotes 2005.07.31 20:32 #44 默认情况下,任何从DLL导入的行为都是_完全禁止的_。这就是保护。 如果想使用外部DLL,只要启用 "确认每个DLL函数调用 "按钮,就可以看到正在调用什么。这也是保护。就像保护所有的嵌入式文件操作,只能访问/history和/files目录。 Forex Trader 2005.08.05 12:45 #45 2 麦克:对不起,我的问题很愚蠢。我不能运行在Delphi中编译的dlls。 我在Pol("在DLL(Delphi)中传递数组和字符串")也遇到了类似的问题,但那里没有人回答。你能说说这对你来说是如何做到的吗? Forex Trader 2005.08.05 16:10 #46 有什么问题呢?这是一个可以工作的dll的例子(我放弃了所有无关的东西)。 库MetaDLL。 使用 SysUtils。 课堂。 窗户。 {$R *.res}。 {-----Initialize-------------------------------------------------------------} 程序 InitDllData(CurrencyName: PChar); stdcall; 开始 //做一些事情 结束。 {-----Finalize---------------------------------------------------------------} 程序 FreeDllData; stdcall; 开始 //做一些事情 结束。 {-----Process tick-----------------------------------------------------------} 程序 ProcessTick(CurrencyName: PChar; bid, ask: double; time: integer); stdcall; 变化 f: 文件。 DateTime: TDateTime; 开始 尝试 AssignFile(f, WorkDir + CurrencyName + '.tik')。 尝试 reset(f, 1); 不包括 重写(f, 1)。 结束。 尝试 DateTime := MTTimeToNormal(time)。 seek(f, FileSize(f))。 BlockWrite(f, DateTime, sizeof(DateTime))。 BlockWrite(f, bid, sizeof(bid))。 最后 关闭文件(f)。 结束。 不包括 // 结束。 结束。 出口 ProcessTick, InitDllData, FreeDllData; 结束。 不要忘记将你的所有函数设置为stdcall,只使用标准的Windows类型(字符串只作为PChar),也不要忘记在export指令中指定你所有的导出函数,你将会很高兴。 是的,也请看Renat发布的关于如何在EA中允许使用dll的图片。 Calling functions from the Forex Trader 2005.08.05 16:15 #47 我还忘了补充,这个dll应该位于<metatrader>\experts\libraries\文件夹中,并在专家顾问代码中这样连接。 #import "MetaDLL.dll" void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime)。 void InitDllData(string CurrencyName)。 void FreeDllData()。 然后你可以调用任何函数 Forex Trader 2005.08.08 03:52 #48 谢谢你的帮助。结果发现这只是一个错误的数组,作为从dll中调用的函数的一个参数。 Forex Trader 2005.08.10 09:58 #49 有什么问题呢?下面是一个可以工作的dll的例子(我去掉了所有不相关的东西):<br / translate="no">。 库MetaDLL。 使用 SysUtils。 课堂。 窗户。 ... 对不起,我又问了一个愚蠢的问题:是否可以在这个DLL中使用VCL(更确切地说,你是否可以这样做)?因为当我将 "表格 "连接到ddl时,MetaTrader在启动时仍然会出现 "错误 "崩溃(或者在连接相应的专家顾问时)。 实际上,我只对TD数据库、TDataSource、TQuery感兴趣。 Forex Trader 2005.09.05 20:39 #50 2麦克 我对你的模拟器非常感兴趣,你可以在历史上练习。不幸的是,据我所知,MT公司是不会来的。据我所知,你并不是真的想卖掉它,因为你在外汇上赚了很多钱。但我在网上寻找类似的东西已经很长时间了,至今没有成功。如果你让我使用你的开发,我将很高兴。就我而言,我可以为你提供MTS,也许这是你唯一可能感兴趣的东西。 我希望得到你的合作,亚历山大。f1-forum@mail.ru 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
只要看看设置--一切都被禁用了(DLLs默认是禁用的)。
如果想使用外部DLL,只要启用 "确认每个DLL函数调用 "按钮,就可以看到正在调用什么。这也是保护。就像保护所有的嵌入式文件操作,只能访问/history和/files目录。
库MetaDLL。
使用
SysUtils。
课堂。
窗户。
{$R *.res}。
{-----Initialize-------------------------------------------------------------}
程序 InitDllData(CurrencyName: PChar); stdcall;
开始
//做一些事情
结束。
{-----Finalize---------------------------------------------------------------}
程序 FreeDllData; stdcall;
开始
//做一些事情
结束。
{-----Process tick-----------------------------------------------------------}
程序 ProcessTick(CurrencyName: PChar; bid, ask: double; time: integer); stdcall;
变化
f: 文件。
DateTime: TDateTime;
开始
尝试
AssignFile(f, WorkDir + CurrencyName + '.tik')。
尝试
reset(f, 1);
不包括
重写(f, 1)。
结束。
尝试
DateTime := MTTimeToNormal(time)。
seek(f, FileSize(f))。
BlockWrite(f, DateTime, sizeof(DateTime))。
BlockWrite(f, bid, sizeof(bid))。
最后
关闭文件(f)。
结束。
不包括
//
结束。
结束。
出口
ProcessTick, InitDllData, FreeDllData;
结束。
不要忘记将你的所有函数设置为stdcall,只使用标准的Windows类型(字符串只作为PChar),也不要忘记在export指令中指定你所有的导出函数,你将会很高兴。
是的,也请看Renat发布的关于如何在EA中允许使用dll的图片。
#import "MetaDLL.dll"
void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime)。
void InitDllData(string CurrencyName)。
void FreeDllData()。
然后你可以调用任何函数
库MetaDLL。
使用
SysUtils。
课堂。
窗户。
...
对不起,我又问了一个愚蠢的问题:是否可以在这个DLL中使用VCL(更确切地说,你是否可以这样做)?因为当我将 "表格 "连接到ddl时,MetaTrader在启动时仍然会出现 "错误 "崩溃(或者在连接相应的专家顾问时)。
实际上,我只对TD数据库、TDataSource、TQuery感兴趣。
我对你的模拟器非常感兴趣,你可以在历史上练习。不幸的是,据我所知,MT公司是不会来的。据我所知,你并不是真的想卖掉它,因为你在外汇上赚了很多钱。但我在网上寻找类似的东西已经很长时间了,至今没有成功。如果你让我使用你的开发,我将很高兴。就我而言,我可以为你提供MTS,也许这是你唯一可能感兴趣的东西。
我希望得到你的合作,亚历山大。f1-forum@mail.ru