以下は、Visual Studio 2012 C++で作成したコードです。拡張子がcppのファイルmain.(main.cpp)。
#define MT4_EXPFUNC __declspec(dllexport) создал макрос чтобы не писать запись __declspec(dllexport)int __stdcall add(int a=0, int b=0)
//__declspec(dllexport)int __stdcall add(int a=0, int b=0)и так пробовал тоже
MT4_EXPFUNC int __cdecl add(int a=0, int b=0)//stdcall данная примитивная функция ничего не делает а просто возвращает значение 18
{return (18);пробовал так return18;}
それが、スクリプトがキックアウトされただけで、その後のエラーコードを見るにはどうしたらいいのでしょうか?あるいは、次に実行したときに、すぐに読み出せるか。
原理的には、64x用にdllをコンパイル することで問題は解決しました。とはいえ、その後、さらにエラーが出るようになったが、そんなことはどうでもよくて、一般的なc/s++用のライブラリをmql5にビルドしてリンクする方法を理解すればよかったのである。私の例では、現在正常に動作しています。
Studio 2017をお持ちの方で、古いスタジオのためにこの説明書を見て、何をどうすればいいのかわからないという方は、まずこちらの記事(https://docs.microsoft.com/ru-ru/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2017)をお読みになることをおすすめします。
そして、この記事の例に従ってDLLを作成し、クライアントアプリケーションでテストしたら、この指示の2番目から、「MQL5プログラムでは、次のように記述して呼び出す必要があります」を読んでください。つまり、mt5に記載されている通りにDLLを宣言してください。
私はこの方法で問題を解決しました。
C++とMQLの型相関をマクロの形で一覧にしてほしい。
#define MQL_STRING wchar_t
以下は、Visual Studio 2012 C++で作成したコードです。拡張子がcppのファイルmain.(main.cpp)。
そして、エクスポートされた関数のリストを持つmain extension def (main.def)というファイルを作成 し、コードは次の ようになります。
LIBRARY "dllmt42" EXPORTS add
そして、それをコンパイラにインポートしました。
コンパイルは問題ないのですが、EAをチャート上に放置すると、混乱します
未解決のインポート関数呼び出し、'dllmt42.dll' の '_add' が見つかりました。Total Comanderは、ファイルをドラッグすると、コンパイラ本体だけでなく、関数も表示されます
誰が助けることができる、どのようにエラーで問題を解決するために、すべての後に保存し、関数の正しいエクスポートのための責任がある拡張子.defを持つファイルですか?
以下は、Visual Studio 2012のc++で作成したコードです。ファイルmain.の拡張子をcppにしたもの(main.cpp)
そして、エクスポートされた関数の リストを持つ、main extension def (main.def)のファイルを作成 しました、コードは次のようになります:
そして、それをコンパイラにインポートしました。
コンパイル後は問題ないのですが、EAをチャート上に放置すると、混乱します
未解決のインポート関数呼び出し、'dllmt42.dll' の '_add' が見つかりました。Total Comanderは、ファイルをドラッグすると、コンパイラ本体だけでなく、関数も表示されます
誰が助けることができる、どのようにエラーで問題を解決するために、すべての後に格納し、関数の正しいエクスポートのための責任がある.def拡張子を持つファイルですか?
Extern "C" は、C++であるため、エクスポートされた関数の宣言と実装の両方に追加する必要があります。そうしないと、入力された署名は「プラス」され、MT(だけでなく、他のすべての人)がそれを見ることはできません。
Extern "C" は、C++がここにあるので、エクスポートされた関数の宣言と実装の両方に追加する必要があります。そうしないと、入力した署名は「プラス」になってしまい、MTは(他の人と同じように)見ることができません。
このように追加しています。
しかし、まだ同じことがあります -未解決のインポート関数 呼び出し、'dllmt42.dll' の '_add' を見つける... 。つまり、++のない純粋なCが必要なのでしょうか?
.defファイルは全く必要ありません。MQLの#importセクションにある関数を複製する必要があります。
まあ、はい、そして、私はそれを見たりすることなく、私は行かない、まあ、それはすでにポイントを複製されているものを私に見せて?