Dllから関数を呼び出して結果を返す - ページ 5

 
保護されているのは良いことで、ひどく貧しいのは悪いことです。また、DELLを呼び出せるということで、セキュリティはどうなっているのでしょうか?:)もちろん、call dllなどを禁止することはできますが。FindFirst と FindNext Expert Advisor のディレクトリファイルに実行タスクの束を送り、それを見て実行させるというアイディアが必要だったのです。不条理であることがわかった。
 
また、DLLを呼び出すことができるため、安全性はどうでしょうか?:)

設定を見るだけで、すべてが無効になっています(DLLはデフォルトで無効になっています)。

 
DELLを差し込むときに意識しているのは、そのことです。ただ、DLLの輸入が 許可されているのであれば、どんなプロテクトがかかっているのか、という話です。
 
デフォルトでは、DLLからのインポートは完全に禁止されています。これがプロテクトです。
外部DLLを 使いたい場合は、「Acknowledge each DLL function call」ボタンを有効にして、何が呼び出されているかを確認すればよい。これは保護でもある。ちょうど、すべての埋め込みファイル操作を、/historyと/filesディレクトリへのアクセスのみで保護するようなものです。
 
2 mike: 愚かな質問で申し訳ありません。DelphiでコンパイルしたDLLを実行できない。 また、Pol(「DLLにおける配列と文字列の受け渡し(Delphi)」)でも同様の問題に遭遇しましたが、そこでは誰も答えてくれませんでした。どうしてそうなったのか、おわかりになりますか?
 
何が問題なのか?以下は、動作するDLLの例です(無関係なものは全て落としています)。

ライブラリMetaDLL。

用途
SysUtils。
クラスです。
のウィンドウを表示します。

{$R *.res}

{-----Initialize-------------------------------------------------------------}
procedure InitDllData(CurrencyName: PChar); stdcall;
始める
// 何かをする
を終了します。

{-----Finalize---------------------------------------------------------------}
procedure FreeDllData; stdcall;
始める
// 何かをする
を終了します。

{-----Process tick-----------------------------------------------------------}
procedure ProcessTick(CurrencyName: PChar; bid, ask: double; time: integer); stdcall;
ヴァル
f: ファイル
DateTime: TDateTime;
始める
こころがける
AssignFile(f, WorkDir + CurrencyName + '.tik');
こころがける
reset(f, 1)とする。
より
rewrite(f, 1)とする。
を終了します。

こころがける
DateTime := MTTimeToNormal(time);
seek(f, FileSize(f));
BlockWrite(f, DateTime, sizeof(DateTime));
BlockWrite(f, bid, sizeof(bid));
揚句の果て
CloseFile(f)です。
を終了します。
より
//
を終了します。
を終了します。


輸出
ProcessTick、InitDllData、FreeDllData。

を終了します。

すべての関数をstdcallにすること、Windows標準の型(文字列はPCharのみ)を使うこと、exportディレクティブですべてのエクスポート関 数を指定することを忘れないでください。

そうそう、EAでDLLの使用を許可する方法について、Renatが投稿した画像も見てください。
 
また、DLLは<metatrader>Circleフォルダに置き、Expert Advisorのコードでこのように接続する必要があることを追加するのを忘れていました。

#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は起動時(または対応するExpert Advisorを接続する時)に「エラー」でクラッシュしてしまうからです。
実は、TDatabase、TDataSource、TQueryにしか興味がないんです。
 
2マイク
歴史の練習ができるエミュレータということで、とても興味があります。残念ながら私の知る限りでは、MTは間に合いそうにありません。FXで儲かっているので、あまり売りたくないというのが本音でしょう。でも、ずっとウェブで似たようなものを探していたのですが、今のところ成功はしていません。開発したものを使わせていただければ幸いです。私の方からは、MTSを提供することができます。もしかしたら、それだけがあなたの興味を引くかもしれません。
アレキサンダーさん、よろしくお願いします。f1-forum@mail.ru