Защищенный - хорошо, сильно бедный - плохо. А с возможностью вызова dll какой он защищенный? :) Хотя конечно можно запретить вызывать dll и тд. и тп. FindFirst и FindNext мне нужны были когда появилась мысль кинуть пачку заданий на исполнение именно в директорию files эксперта чтобы он их перебрал и исполнил. Оказалось фиг.
По _умолчанию_ любой импорт из DLL _полностью_запрещен_. Это и есть защита. Если кто хочет использовать внешние DLL, то достаточно включить кнопку "Подтверждать вызов каждой DLL функции" и посмотреть что же там вызывается. Это тоже - защита. Так же как и защита всех встроенных файловых операций доступом только к каталогам /history и /files.
2 mike: извините за глупый вопрос. Не получается запустить скомпилированные в Дельфи dll. С подобной проблемой столкнулся также Pol ("Передача массивов и строк в DLL (Delphi)"), но там ему никто не ответил. Не подскажете, как это удалось Вам?
А в чем проблема-то? Вот пример длл которая работает (я выкинул все не относящееся к делу):
library MetaDLL;
uses SysUtils, Classes, windows;
{$R *.res}
{-----Initialize-------------------------------------------------------------} procedure InitDllData(CurrencyName: PChar); stdcall; begin // do something end;
{-----Finalize---------------------------------------------------------------} procedure FreeDllData; stdcall; begin // do something end;
Не забывай задавать все свои функции как stdcall, используй только стандартные типы винды (строки только как PChar), также не забудь указать в директиве export все свои экспортируемые функции и будет тебе щастье.
Да, и еще посмотри на картинку запощенную Ренатом как разрешить использование длл в эксперте.
А в чем проблема-то? Вот пример длл которая работает (я выкинул все не относящееся к делу):
library MetaDLL;
uses SysUtils, Classes, windows; ...
Извините за еще один глупый вопрос: А можно ли использовать в этом DLL (точнее - получалост ли у Вас) использовать VCL. А то у меня при подключению к ddl "формы", MetaTrader еще при завуске (или при подключении соответствующего советника) вылетает с "ошибкой". Меня, собственно, интересуют только TDatabase, TDataSource, TQuery
2 mike Меня очень заитересовал ваш эмулятор, то что можно попрактиковаться на истории. К сожалению насколько я знаю в МТ его делать не собираются. Как я понимаю вы не очень хотите его продавать, так как хорошо зарабатываете на Forex. Но я долго искал что-то подобное в инете, пока безуспешно. Я был бы рад если бы вы позволили воспользоваться своей разработкой. С моей стороны могу предложить Вам МТС, пожалуй это единственное что может Вас заитересовать. Надеюсь на сотрудничество, Александр. f1-forum@mail.ru
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Достаточно посмотреть в настройки - все отключается (DLL по умолчанию отключены):
Если кто хочет использовать внешние DLL, то достаточно включить кнопку "Подтверждать вызов каждой DLL функции" и посмотреть что же там вызывается. Это тоже - защита. Так же как и защита всех встроенных файловых операций доступом только к каталогам /history и /files.
library MetaDLL;
uses
SysUtils,
Classes,
windows;
{$R *.res}
{-----Initialize-------------------------------------------------------------}
procedure InitDllData(CurrencyName: PChar); stdcall;
begin
// do something
end;
{-----Finalize---------------------------------------------------------------}
procedure FreeDllData; stdcall;
begin
// do something
end;
{-----Process tick-----------------------------------------------------------}
procedure ProcessTick(CurrencyName: PChar; bid, ask: double; time: integer); stdcall;
var
f: file;
DateTime: TDateTime;
begin
try
AssignFile(f, WorkDir + CurrencyName + '.tik');
try
reset(f, 1);
except
rewrite(f, 1);
end;
try
DateTime := MTTimeToNormal(time);
seek(f, FileSize(f));
BlockWrite(f, DateTime, sizeof(DateTime));
BlockWrite(f, bid, sizeof(bid));
finally
CloseFile(f);
end;
except
//
end;
end;
exports
ProcessTick, InitDllData, FreeDllData;
end.
Не забывай задавать все свои функции как stdcall, используй только стандартные типы винды (строки только как PChar), также не забудь указать в директиве export все свои экспортируемые функции и будет тебе щастье.
Да, и еще посмотри на картинку запощенную Ренатом как разрешить использование длл в эксперте.
#import "MetaDLL.dll"
void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime);
void InitDllData(string CurrencyName);
void FreeDllData();
а дальше уже можно дергать любую функцию
library MetaDLL;
uses
SysUtils,
Classes,
windows;
...
Извините за еще один глупый вопрос: А можно ли использовать в этом DLL (точнее - получалост ли у Вас) использовать VCL. А то у меня при подключению к ddl "формы", MetaTrader еще при завуске (или при подключении соответствующего советника) вылетает с "ошибкой".
Меня, собственно, интересуют только TDatabase, TDataSource, TQuery
Меня очень заитересовал ваш эмулятор, то что можно попрактиковаться на истории. К сожалению насколько я знаю в МТ его делать не собираются. Как я понимаю вы не очень хотите его продавать, так как хорошо зарабатываете на Forex. Но я долго искал что-то подобное в инете, пока безуспешно. Я был бы рад если бы вы позволили воспользоваться своей разработкой. С моей стороны могу предложить Вам МТС, пожалуй это единственное что может Вас заитересовать.
Надеюсь на сотрудничество, Александр. f1-forum@mail.ru