using System; using System.Text; using RGiesecke.DllExport; using System.Runtime.InteropServices;
namespace TEST { class TEST { [DllExport("Add", CallingConvention = CallingConvention.StdCall)] public static int Add(int left, int right) { return left + right; } } }
namespace RGiesecke.DllExport {
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] partial class DllExportAttribute : Attribute { public DllExportAttribute() { } public DllExportAttribute(string exportName) : this(exportName, CallingConvention.StdCall) { } public DllExportAttribute(string exportName, CallingConvention callingConvention) { ExportName = exportName; CallingConvention = callingConvention; } public CallingConvention CallingConvention { get; set; } public string ExportName { get; set; } } }
// код МТ4 //+------------------------------------------------------------------+ #import "TEST.dll" int Add(int a,int b); #import
ありがとう!尊敬します!
MTからC#に文字列を渡す方法。解説をお願いします。
ありがとう!尊敬します!
MTからC#に文字列を渡す方法。説明してください。
新しい記事「アンマネージド・エクスポートを使用してC#コードをMQL5に公開する」が公開されました:
著者:investeo
こんにちは、investeoさん!
C#のDLLをMQL5のコードに接続する方法を検索していて、この記事を見つけました。とても助かりました!ありがとうございます。
今、私はサードパーティのサーバーとWebSocket接続を実行するDLLからデータを取得する必要があり、サーバーから来たライブデータをMQL5に送信する必要がありますが、MQL5とDLLまたはAPI間のリアルタイムおよび双方向通信の実装例を見つけられませんでした。
助けていただけますか?
Error 2 C:¥Users¥Administrator¥AppData¥Local¥Temp¥tmp8B24¥dllTest.il(58) : error : syntax error at token '{' in: { dllTest
このエラーは中国語システムで発生します。UnmanageExportsがILファイルを生成する際に、いくつかのコメントが中国語で生成されるため、UnmanageExportsが正しく動作しないためです。この問題は日本語や英語のOSでは発生しないので、OSを英語に変更すれば解決します。
しかし、これはあまりに面倒なので、ここでは小さなキツネのようなものを取り出して解決する必要があります!
リトルフォックスが提供するUnmanaged Exportsの修正プログラムを以下のアドレスからダウンロードしてください。
https://www.noisyfox.cn/397.html
http://www.magecorn.com/p/280.shtml 。
詳しくは上記2つの記事をお読みください。
上記のコードの所有者は、どのようにそれを実行することができませんでしたか?
2017.04.28 23:48:08.774 'Testme.dll'で'Add'が見つかりません。
エディター・ナビゲーターの "Show all file types "をオンにして、DLLをマウスでつかみ、プログラムのMQL5 ウィンドウに放り込んでください。
おそらくその結果に驚かれることでしょう。
こんにちは。2018年ですね。
Netで書かれたエクスポートされた関数を呼び出す例を見ることができる場所を教えてください。
あなたは、IJWの助けを借りて、C + +ストリッパーを使用することができ、その後、コンパイラの手段によって純粋に単一の DLLにすべてをマージする - リンカ、記事で説明したテンプレートとの曲解は必要ありませんが、ここで簡単に説明 -http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file.
さて、そしてテンプレートRGieseckeで説明した方法 - それはハックであり、そのような遅かれ早かれ動作しなくなり、私は、ところで、また動作しませんでした...しかし、誰かがまだ記事に記載されているILメソッドでプレーしたい場合は、別のバイクがありますが、しかし、また働いていない -https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool。
こんにちは。1つのファイルでc++/c++CLI/c#をビルドするステップバイステップのテスト例を書いてもらえますか?記事の著者と同じ簡単な例です。
C#で書かれた関数にmt4(またはmt5)からアクセスする簡単な例を教えてください。Sharpの関数にaとbの値を渡し、その結果をmt4(mt5)に返す 記事にある
https://www.mql5.com/ja/articles/249 著者のコンパイルしたdllはmt4とmt5で正しく動作します! しかし、著者のソースから(VisualStudio2010で)自分でコンパイルしたdllを作成しようとすると、このdllは動作しません(エラー127を書き込みます) .NETのバージョンはすべてインストールされています。
// код C#
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace TEST
{
class TEST
{
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
}
namespace RGiesecke.DllExport
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
partial class DllExportAttribute : Attribute
{
public DllExportAttribute()
{
}
public DllExportAttribute(string exportName)
: this(exportName, CallingConvention.StdCall)
{
}
public DllExportAttribute(string exportName, CallingConvention callingConvention)
{
ExportName = exportName;
CallingConvention = callingConvention;
}
public CallingConvention CallingConvention { get; set; }
public string ExportName { get; set; }
}
}
// код МТ4
//+------------------------------------------------------------------+
#import "TEST.dll"
int Add(int a,int b);
#import
void start()
{
Comment(Add(3,2));
}
//+------------------------------------------------------------------+
私は3日3晩、ググったり実験したりしました。一般的に、サンプルはVS2017で動作し、MT4で.dllをコンパイルして実行することができました。Win10のロシア語では実行できませんでした。
私は次のことをしました:Win7 - 64で仮想マシンを インストールしましたが、英語版で、VS2017の英語版をインストールし、C#のパッケージのみをインストールし、RGieseckeから テンプレートVS2017のあるフォルダに テンプレートをコピーしました。プロジェクトをコンパイルするとき、プラットフォームのチェックを忘れないでください - 必ずx86(MT4用) 。最初のコンパイルで、名前空間 RGieseckeがないというエラーが出たので、プロジェクトから UnmanagedExportsパッケージをインストールした。 ildasm.exeが見つからないという1つのエラーですべてがコンパイルされましたが、.dllはMT4で問題なく動作しました。
問題はおそらくRGieseckeのテンプレートにあり、英語版のWin、英語版のVS2017では正常に動作し、VS2017のすべてのパスはデフォルトで設定されているはずです。
これがその方法だ;)
この方法は、.NETバージョン5で機能しますか?
テストしたことはありませんが、うまくいくとは思えません。
MT4はC#とやり取りするのが非常に難しく、常に落とし穴があります。
MT5に乗り換える方が簡単です。
しかし、原則的にMT4を使用したいのであれば、オプションとして、記事の方法論に従ってC#で.dllを起動し、その中で任意のC#コードを別スレッドで起動し、交換を整理します。