Вызов функций из dll и возврат результатов - страница 5

 
Защищенный - хорошо, сильно бедный - плохо. А с возможностью вызова dll какой он защищенный? :) Хотя конечно можно запретить вызывать dll и тд. и тп. FindFirst и FindNext мне нужны были когда появилась мысль кинуть пачку заданий на исполнение именно в директорию files эксперта чтобы он их перебрал и исполнил. Оказалось фиг.
 
А с возможностью вызова dll какой он защищенный? :)

Достаточно посмотреть в настройки - все отключается (DLL по умолчанию отключены):

 
Я в курсе, когда подключал свою длл ставил. Просто если разрешен импорт длл о какой защите идет разговор?
 
По _умолчанию_ любой импорт из 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;

{-----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 все свои экспортируемые функции и будет тебе щастье.

Да, и еще посмотри на картинку запощенную Ренатом как разрешить использование длл в эксперте.
 
Еще забыл добавить что длл должна будет находиться в каталоге <метатрейдер>\experts\libraries\ а в коде эксперта подключается так:

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

а дальше уже можно дергать любую функцию
 
Спасибо за помощь. Оказывается, просто некорректно вызывался массив в качестве параметра функции, вызываемой из dll
 
А в чем проблема-то? Вот пример длл которая работает (я выкинул все не относящееся к делу):

library MetaDLL;

uses
SysUtils,
Classes,
windows;
...


Извините за еще один глупый вопрос: А можно ли использовать в этом DLL (точнее - получалост ли у Вас) использовать VCL. А то у меня при подключению к ddl "формы", MetaTrader еще при завуске (или при подключении соответствующего советника) вылетает с "ошибкой".
Меня, собственно, интересуют только TDatabase, TDataSource, TQuery
 
2 mike
Меня очень заитересовал ваш эмулятор, то что можно попрактиковаться на истории. К сожалению насколько я знаю в МТ его делать не собираются. Как я понимаю вы не очень хотите его продавать, так как хорошо зарабатываете на Forex. Но я долго искал что-то подобное в инете, пока безуспешно. Я был бы рад если бы вы позволили воспользоваться своей разработкой. С моей стороны могу предложить Вам МТС, пожалуй это единственное что может Вас заитересовать.
Надеюсь на сотрудничество, Александр. f1-forum@mail.ru
Причина обращения: