从dll中调用函数并返回结果 - 页 5

 
受保护是好事,严重贫困是坏事。而有了调用dll的能力,其安全性如何呢?:)当然,你可以禁止调用dll,等等,等等。FindFirst和FindNext我需要的是,当我有一个想法,将一堆任务的执行发送到专家顾问的目录文件中,这样它就可以查看它们并执行。结果发现这很荒唐。
 
而有了调用dll的能力,其安全性如何?:)

只要看看设置--一切都被禁用了(DLLs默认是禁用的)。

 
我在插入我的dll时意识到了这一点。只是,如果你被允许导入 dll,你说的是什么样的保护?
 
默认情况下,任何从DLL导入的行为都是_完全禁止的_。这就是保护。
如果想使用外部DLL,只要启用 "确认每个DLL函数调用 "按钮,就可以看到正在调用什么。这也是保护。就像保护所有的嵌入式文件操作,只能访问/history和/files目录。
 
2 麦克:对不起,我的问题很愚蠢。我不能运行在Delphi中编译的dlls。 我在Pol("在DLL(Delphi)中传递数组和字符串")也遇到了类似的问题,但那里没有人回答。你能说说这对你来说是如何做到的吗?
 
有什么问题呢?这是一个可以工作的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的图片。
 
我还忘了补充,这个dll应该位于<metatrader>\experts\libraries\文件夹中,并在专家顾问代码中这样连接。

#import "MetaDLL.dll"
void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime)。
void InitDllData(string CurrencyName)。
void FreeDllData()。

然后你可以调用任何函数
 
谢谢你的帮助。结果发现这只是一个错误的数组,作为从dll中调用的函数的一个参数。
 
有什么问题呢?下面是一个可以工作的dll的例子(我去掉了所有不相关的东西):<br / translate="no">。
库MetaDLL。

使用
SysUtils。
课堂。
窗户。
...


对不起,我又问了一个愚蠢的问题:是否可以在这个DLL中使用VCL(更确切地说,你是否可以这样做)?因为当我将 "表格 "连接到ddl时,MetaTrader在启动时仍然会出现 "错误 "崩溃(或者在连接相应的专家顾问时)。
实际上,我只对TD数据库、TDataSource、TQuery感兴趣。
 
2麦克
我对你的模拟器非常感兴趣,你可以在历史上练习。不幸的是,据我所知,MT公司是不会来的。据我所知,你并不是真的想卖掉它,因为你在外汇上赚了很多钱。但我在网上寻找类似的东西已经很长时间了,至今没有成功。如果你让我使用你的开发,我将很高兴。就我而言,我可以为你提供MTS,也许这是你唯一可能感兴趣的东西。
我希望得到你的合作,亚历山大。f1-forum@mail.ru