Dllから関数を呼び出して結果を返す - ページ 5 1234567 新しいコメント Forex Trader 2005.07.31 19:37 #41 保護されているのは良いことで、ひどく貧しいのは悪いことです。また、DELLを呼び出せるということで、セキュリティはどうなっているのでしょうか?:)もちろん、call dllなどを禁止することはできますが。FindFirst と FindNext Expert Advisor のディレクトリファイルに実行タスクの束を送り、それを見て実行させるというアイディアが必要だったのです。不条理であることがわかった。 MetaQuotes 2005.07.31 19:52 #42 また、DLLを呼び出すことができるため、安全性はどうでしょうか?:) 設定を見るだけで、すべてが無効になっています(DLLはデフォルトで無効になっています)。 Forex Trader 2005.07.31 19:59 #43 DELLを差し込むときに意識しているのは、そのことです。ただ、DLLの輸入が 許可されているのであれば、どんなプロテクトがかかっているのか、という話です。 MetaQuotes 2005.07.31 20:32 #44 デフォルトでは、DLLからのインポートは完全に禁止されています。これがプロテクトです。 外部DLLを 使いたい場合は、「Acknowledge each DLL function call」ボタンを有効にして、何が呼び出されているかを確認すればよい。これは保護でもある。ちょうど、すべての埋め込みファイル操作を、/historyと/filesディレクトリへのアクセスのみで保護するようなものです。 Forex Trader 2005.08.05 12:45 #45 2 mike: 愚かな質問で申し訳ありません。DelphiでコンパイルしたDLLを実行できない。 また、Pol(「DLLにおける配列と文字列の受け渡し(Delphi)」)でも同様の問題に遭遇しましたが、そこでは誰も答えてくれませんでした。どうしてそうなったのか、おわかりになりますか? Forex Trader 2005.08.05 16:10 #46 何が問題なのか?以下は、動作する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が投稿した画像も見てください。 Calling functions from the Forex Trader 2005.08.05 16:15 #47 また、DLLは<metatrader>Circleフォルダに置き、Expert Advisorのコードでこのように接続する必要があることを追加するのを忘れていました。 #import "MetaDLL.dll" void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime); void InitDllData(string CurrencyName)。 void FreeDllData()。 を実行し、任意の関数を呼び出すことができます。 Forex Trader 2005.08.08 03:52 #48 ありがとうございました。結局、DLLから呼び出された関数のパラメータとして、誤って配列が呼び出されただけでした。 Forex Trader 2005.08.10 09:58 #49 何が問題なのか?以下は、動作する dll の例です (不要なものはすべて削除しました):<br /> translate="no">。 ライブラリMetaDLL。 用途 SysUtils。 クラスです。 のウィンドウを表示します。 ... またまた愚問で申し訳ないのですが、このDLLでVCLを使うことは可能でしょうか(正確には、可能だったのでしょうか)?なぜなら、ddlに「フォーム」を接続しても、MetaTraderは起動時(または対応するExpert Advisorを接続する時)に「エラー」でクラッシュしてしまうからです。 実は、TDatabase、TDataSource、TQueryにしか興味がないんです。 Forex Trader 2005.09.05 20:39 #50 2マイク 歴史の練習ができるエミュレータということで、とても興味があります。残念ながら私の知る限りでは、MTは間に合いそうにありません。FXで儲かっているので、あまり売りたくないというのが本音でしょう。でも、ずっとウェブで似たようなものを探していたのですが、今のところ成功はしていません。開発したものを使わせていただければ幸いです。私の方からは、MTSを提供することができます。もしかしたら、それだけがあなたの興味を引くかもしれません。 アレキサンダーさん、よろしくお願いします。f1-forum@mail.ru 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
設定を見るだけで、すべてが無効になっています(DLLはデフォルトで無効になっています)。
外部DLLを 使いたい場合は、「Acknowledge each DLL function call」ボタンを有効にして、何が呼び出されているかを確認すればよい。これは保護でもある。ちょうど、すべての埋め込みファイル操作を、/historyと/filesディレクトリへのアクセスのみで保護するようなものです。
ライブラリ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が投稿した画像も見てください。
#import "MetaDLL.dll"
void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime);
void InitDllData(string CurrencyName)。
void FreeDllData()。
を実行し、任意の関数を呼び出すことができます。
ライブラリMetaDLL。
用途
SysUtils。
クラスです。
のウィンドウを表示します。
...
またまた愚問で申し訳ないのですが、このDLLでVCLを使うことは可能でしょうか(正確には、可能だったのでしょうか)?なぜなら、ddlに「フォーム」を接続しても、MetaTraderは起動時(または対応するExpert Advisorを接続する時)に「エラー」でクラッシュしてしまうからです。
実は、TDatabase、TDataSource、TQueryにしか興味がないんです。
歴史の練習ができるエミュレータということで、とても興味があります。残念ながら私の知る限りでは、MTは間に合いそうにありません。FXで儲かっているので、あまり売りたくないというのが本音でしょう。でも、ずっとウェブで似たようなものを探していたのですが、今のところ成功はしていません。開発したものを使わせていただければ幸いです。私の方からは、MTSを提供することができます。もしかしたら、それだけがあなたの興味を引くかもしれません。
アレキサンダーさん、よろしくお願いします。f1-forum@mail.ru