Chamando funções da dll e retornando resultados - página 5

 
Protegido é bom, severamente pobre é ruim. E com a capacidade de chamar um dll, quão seguro é? :) Embora, naturalmente, você possa proibir a chamada dll, etc. e assim por diante. FindFirst e FindNext que eu precisava quando tive a idéia de enviar um monte de tarefas para execução nos arquivos de diretório do Expert Advisor para que ele pudesse olhar através delas e executar. Acabou se tornando um absurdo.
 
E com a capacidade de invocar a dll, quão segura ela é? :)

Basta olhar nas configurações - tudo está desabilitado (as DLLs estão desabilitadas por padrão):

 
Estou ciente disso quando liguei a minha dll. É que se você está autorizado a importar a dll, de que tipo de proteção você está falando?
 
Por _default_ qualquer importação de uma DLL é _completamente_ proibida_. Esta é a proteção.
Se alguém quiser usar DLLs externas, basta ativar o botão "Confirmar cada chamada de função DLL" e ver o que está sendo chamado. Isto também é proteção. Assim como proteger todas as operações de arquivos embutidos com acesso apenas aos diretórios /histórico e /arquivos.
 
2 mike: desculpe pela pergunta estúpida. Não posso executar dlls compiladas em Delphi. Também encontrei um problema semelhante com Pol ("Passing arrays and strings in DLL (Delphi)"), mas ninguém respondeu lá. Você pode dizer como isso foi possível para você?
 
Qual é o problema? Aqui está um exemplo de um dll que funciona (eu deixei tudo irrelevante):

biblioteca MetaDLL;

utiliza
SysUtils,
Aulas,
janelas;

{$R *.res}

{-----Initialize-------------------------------------------------------------}
procedimento InitDllData(CurrencyName: PChar); stdcall;
começar
// fazer algo
fim;

{-----Finalize---------------------------------------------------------------}
procedimento FreeDllData; stdcall;
começar
// fazer algo
fim;

{-----Process tick-----------------------------------------------------------}
procedimento ProcessTick(CurrencyName: PChar; lance, perguntar: duplo; tempo: inteiro); stdcall;
var
f: arquivo;
Data/Hora: TDateTime;
começar
tente
AssignFile(f, WorkDir + CurrencyName + '.tik');
tente
reset(f, 1);
exceto
reescrever(f, 1);
fim;

tente
DateTime := MTTimeToNormal(hora);
seek(f, FileSize(f)));
BlockWrite(f, DateTime, sizeof(DateTime));
BlockWrite(f, bid, sizeof(bid));
finalmente
CloseFile(f);
fim;
exceto
//
fim;
fim;


exportações
ProcessTick, InitDllData, FreeDllData;

fim.

Não se esqueça de definir todas as suas funções como stdcall, use apenas tipos de Windows padrão (strings apenas como PChar), também não se esqueça de especificar na diretiva de exportação todas as suas funções exportadas e você ficará feliz.

Sim, e veja também a foto publicada pela Renat sobre como permitir o uso da dll na EA.
 
Também esqueci de acrescentar que a dll deveria estar localizada na pasta <metrader>>especialistas e conectada no código Expert Advisor como este:

#importar "MetaDLL.dll"
nulo ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime);
dados initDll(string CurrencyName) nulos;
FreeDllData() vazio;

e então você pode chamar qualquer função
 
Obrigado pela ajuda. Acontece que foi apenas uma matriz chamada incorretamente como parâmetro de uma função chamada a partir da dll
 
Qual é o problema? Aqui está um exemplo de uma dll que funciona (eu retirei todas as coisas irrelevantes):<br / translate="no">
biblioteca MetaDLL;

utiliza
SysUtils,
Aulas,
janelas;
...


Desculpe por outra pergunta tola: é possível utilizar a VCL nesta DLL (para ser mais preciso, foi possível para você)? Porque quando eu conecto "forma" à ddl, o MetaTrader ainda trava com "erro" na inicialização (ou quando conecto um Expert Advisor correspondente).
Na verdade só estou interessado em TDatabase, TDataSource, TQuery
 
2 mike
Estou muito interessado em seu emulador, que você pode praticar na história. Infelizmente, tanto quanto sei, a MT não vai conseguir. Como eu entendo, você não quer realmente vendê-lo porque faz bom dinheiro no Forex. Mas eu tenho procurado algo semelhante na web por muito tempo, até agora sem sucesso. Eu ficaria feliz se você me deixasse usar seu desenvolvimento. Da minha parte posso oferecer-lhe MTS, talvez seja a única coisa que possa lhe interessar.
Espero por sua cooperação, Alexander. f1-forum@mail.ru