記事"アンマネージドのエクスポートを使用した MQL5へのC#コードのエクスポーズ"についてのディスカッション

 

新しい記事 アンマネージドのエクスポートを使用した MQL5へのC#コードのエクスポーズ はパブリッシュされました:

本稿ではMQL5 コードとマネージドの C# 間の異なる連携手法を提供します。またC# に対してMQL5を整理する方法および MQL5 スクリプト内にてエクスポートされたDLL関数を呼びだす方法例も提供します。ここでお話する例がマネージドのコードで DLLを書くことに関する将来的な研究の基になると信じています。本稿はまたすでにC#で実装されている多くのライブラリを使用するために MetaTrader にドアを開けるものです。

図2 COM 相互運用モデル

作者: investeo

 
とても役に立つ記事だ!詳細なプレゼンテーションをありがとう。
 
Academic:

とても役に立つ記事だ!詳細なプレゼンテーションに感謝します。

はい、ありがとうございます。

Metaquotesはパフォーマンスを向上させ、バイトコードから脱却しようとしました!)))

作者への質問:純粋なMQL5プログラム、DLL、.NETモンスターの実行時間の比較テストは行われましたか?見てみると面白いと思います。

削除済み  
alsu:

ああ、ありがとう。

Metaquotesはパフォーマンスを向上させ、バイトコードから脱却しようとしたんだ!)))

作者への質問:純粋なMQL5プログラム、DLL、.NETモンスターの実行時間の比較テストは行われましたか?見てみると面白いと思います。

私も質問に参加します。MQL、VB.NET(managed)、C++(managed/unmanaged)、C#(managed/unmanaged)の実行時間に興味があります。そして皆さんにもう一つ質問です。MQL5から高速なプログラムやDLLに変更なしでコードを転送するために、ダイナミック・アレイを 使用できる場所はどこでしょうか(VBを除く - VBでは可能です)。VBでは、すべてがMQLとほとんど同じです(動的配列を扱うための演算子)。
 
こんにちは、
原則的に、 可能性のある リソースを 公開 することは とても 有用 だと思います この 記事は とても 興味深いです しかし、私は あまり 経験のない プログラマー なので、いくつか 質問があります。

私の観点では、アンマネージドコードは、プラットフォームに依存しない開発の可能性を与えてくれます。しかし、誰かがメタトレーダーを使用する場合、彼は定義されたプラットフォームを得ます。

一般的に アンマネージドコードを 使用した場合、またMQL5と 組み合わせた場合の利点は でしょうか?


 
smartwart:
こんにちは、
原則的に、 可能性のある リソースを 公開 することは とても 有用 だと思います この 記事は とても 興味深いです しかし、私は あまり 経験のない プログラマー なので、いくつか 質問があります。

私の観点では、アンマネージドコードは、プラットフォームに依存しない開発の可能性を与えてくれます。しかし、誰かがメタトレーダーを使用する場合、彼は定義されたプラットフォームを得ます。

一般的に アンマネージコードと MQL5を 組み合わせると 、どのような 利点が ある のでしょうか?


smartwartさん、こんにちは、

利点は、取引目的に使用できるC#ですでに開発されたコードが大量にあることです。次回の記事で詳しく説明します。

cheerz、

インベスティオ

 

これは今までで最高のものだ!私はC#が大好きで、これを使えるようになる可能性を探していました!今年最高のニュースだ!MQL5でEAを書いたのはこれが最後だったと思います。すべてのロジックをライブラリに配置し、すべてのEAに1つのテンプレートEA.mq5を使用するつもりです(ただ、それらは異なるライブラリでリンクされます)。

ありがとうございました!

 
alsu:

ああ、ありがとう。

Metaquotesはパフォーマンスを向上させ、バイトコードから脱却しようとしたんだ!)))

作者への質問:純粋なMQL5プログラム、DLL、.NETモンスターの実行時間の比較テストは行われましたか?見てみると面白いかもしれません。

どのバイトコードから逃げたのでしょうか?4にはあったのだろうか?最適化されていない遅いコンパイラがあっただけだ。

.NETではバイトコードはなく、起動時にすべてがネイティブのマシンコードにコンパイルされ、特定のプロセッサーに最適化される。最初のコンパイルにかかる時間が重要な場合は、ngen http://msdn.microsoft.com/ru-ru/library/6t9t5wcf.aspx を使ってください。

そしてテスト興味深いですね

私は個人的に、説明されている方法のうち2つしか使っていません。COM-interopがどのように役立つのか理解できなかったが、これはおそらくイメージを完全にするためだろう。記事は5です。

Ngen.exe (генератор образов в машинном коде)
Ngen.exe (генератор образов в машинном коде)
  • msdn.microsoft.com
Внимание Единственный сценарий, в котором необходимо устанавливать зависимость отдельно — это загрузка зависимости приложением с помощью отражения, например путем вызова метода . Важно Примечание Формирование образов для различных сценариев Например, при выполнении сборки в рамках...
 
VDev:

彼らはどのようなバイトコードから逃げていたのか?彼らはそれを4で持っていたのだろうか?最適化されていない遅いコンパイラがあっただけだ。

MQL4にはバイトコードがあったが、MQL5はバイトコードにコンパイルされ、実行前にネイティブのx86またはx64にプリコンパイルされる。MQL5は.NETのように振る舞う

言語としてのMQL5はさらに開発され(開発者はより多くの機能とC++とのより良い互換性を求めている)、オプティマイザが改良される予定である。

最新のビルドでは、#resourceを介してEX5ファイルに直接リソース(.BMPと.WAV)をインクルードできるようになりました。これは、MetaTrader 5プラットフォーム用の本格的なアプリケーションを開発・販売するための良い基盤となります。MQL5マーケットのベータ版は間もなくリリースされ、開発者であれば誰でも(厳正な審査後に)アプリケーションを販売 できるようになり、すべてのトレーダーはこのショップに直接アクセスできるようになります。

 

VS C#用のアンマネージドエクスポート 用のテンプレートをコンパイルできないのは私だけでしょうか?

私はこの記事からテンプレートを入手し(完全なものではありません、dllが不足しています)、R. Gieseckeのライブラリで補足しました。Gieseckeのライブラリはこちらhttp://sites.google.com/site/robertgiesecke/Home/uploads、

オリジナルのテンプレートをR.Gieseckeからオリジナルのテンプレートを取り出し、2つのテンプレートの混合物を作りましたが、何も出てきませんでした。

オリジナルのテンプレートをコンパイルすると、コンパイラーは次のように表示します:

------ Построение начато: проект: UnmanagedExportLibrary8, Конфигурация: Debug Any CPU ------
Построение начато 15.03.2011 19:02:04.
CoreCompile:
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /define:DEBUG;TRACE /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug+ /debug:full /out:obj\Debug\UnmanagedExportLibrary8.dll /target:library DllExport\DllExportAttribute.cs UnmanagedExports.cs Properties\AssemblyInfo.cs
CopyFilesToOutputDirectory:
  Копирование файла из "obj\Debug\UnmanagedExportLibrary8.dll" в "bin\Debug\UnmanagedExportLibrary8.dll".
  UnmanagedExportLibrary8 -> d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll
  Копирование файла из "obj\Debug\UnmanagedExportLibrary8.pdb" в "bin\Debug\UnmanagedExportLibrary8.pdb".
AfterBuild:
  ILDasm: calling 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe' with /quoteallnames /unicode /nobar /linenum "/out:c:\Temp\tmpF417\UnmanagedExportLibrary8.il" "d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll"
  ILDasm: ildasm 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe' returned gracefully.
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll : Export warning EXP0009: Platform is AnyCpu, creating binaries for each CPU platform in a separate subfolder...
  ILAsm: Found method: UnmanagedExportLibrary8.UnmanagedExports..method private hidebysig static float64 'AddDays'(float64 'dateValue', int32 'days') cil managed
  ILAsm: Removing RGiesecke.DllExport.DllExportAttribute from UnmanagedExportLibrary8.UnmanagedExports.AddDays
  ILAsm: Parsing 242 lines of IL took 66 ms.
  ILAsm: calling 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILAsm.exe' with /nologo "/out:d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\x86\UnmanagedExportLibrary8.dll" "c:\Temp\tmpF417\UnmanagedExportLibrary8.x86.il" /DLL "/resource=c:\Temp\tmpF417\UnmanagedExportLibrary8.res"  /debug  
  ILAsm: ILAsm 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILAsm.exe' returned gracefully.
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembling 'c:\Temp\tmpF417\UnmanagedExportLibrary8.x86.il'  to DLL --> 'd:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\x86\UnmanagedExportLibrary8.dll'
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Source file is UNICODE
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_CallingConvention
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_CallingConvention
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_ExportName
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_ExportName
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : ***** FAILURE ***** 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
     в RGiesecke.DllExport.Parsing.IlParser.RunILTool(String installPath, String toolFileName, String requiredPaths, String workingDirectory, String settingsName, String arguments, String toolLoggingCode, String verboseLoggingCode, DllExportNotifier notifier, Int32 timeout)
     в RGiesecke.DllExport.Parsing.ILAsm.RunCore(CpuPlatform cpu, String fileName, String ressourceParam, String ilSuffix)
     в RGiesecke.DllExport.Parsing.ILAsm.Run(String outputFile, String ilSuffix, CpuPlatform cpu)
     в RGiesecke.DllExport.Parsing.ILAsm.ReassembleFile(String outputFile, String ilSuffix, CpuPlatform cpu)
     в RGiesecke.DllExport.DllExportWeaver.RunILAsm(ILAsm ilAsm)
     в RGiesecke.DllExport.DllExportWeaver.Run()
     в RGiesecke.DllExport.MSBuild.DllExportTask.Execute()

СБОЙ построения.

Затраченное время: 00:00:01.85
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

他のテンプレートをコンパイルしても同じです。

システム:W7 x64 SP1 Home Prem Lic.

IDE: VS 2010.

Googleは助けにはなりません(。

私は手動でプロジェクトDLLを作成し、R.Gieseckeの勧告に従ってそれを補った。Giesecke, no result either.

アドバイスをお願いします。

Robert Giesecke
  • sites.google.com
Deployed as nuget package!no longer limited to C#!VS 2008 is no longer supported (it has no nuget support)Various fixes regarding path reslution for ildasm.exe, ilasm.exe and lib.exeexport names are escaped, so using il keywords like add won't be a problem any moreThe task will only execute when you have selected a specific CPU target (x86...
 
kPVT:

私はVS C#にアンマネージドエクスポート用のテンプレートをコンパイルしていない?

記事からテンプレートを取った(それは完全ではない、DLLを欠いていない)Rのライブラリに追加します。Gieseckeはここで http://sites.google.com/site/robertgiesecke/Home/uploads 、

2つのテンプレートの混合物をしたように、R. Gieseckeから元のテンプレートを取ったが、それは動作しません。

オリジナルのテンプレートをコンパイルすると、コンパイラーは次のように生成する:

他のパターンを同じようにコンパイルすると

システム: W7 x64 SP1 Home Prem Lic.

IDE: VS 2010.

Googleは助けにはなりません(。

Dllは手動でプロジェクトを作成し、Rの推奨に従ってそれを補完します。Giesecke、結果はまた利用できない。

plizアドバイスを助ける。

こんにちはkPVT、

Windows7 - XPの下位互換モードは、Win7に何かありますか?もしdllが32ビットモードで動作するのであれば、64ビットに再コンパイルしないと動作しないということになります。

stackoverflow.comでRGiesecke本人に聞いてみます。

よろしくお願いします、

インベスティオ