"Yönetilmeyen dışa aktarmaları kullanarak C# kodunu MQL5'e gösterme" makalesi için tartışma

 

Yeni makale Yönetilmeyen dışa aktarmaları kullanarak C# kodunu MQL5'e gösterme yayınlandı:

Bu yazıda MQL5 kodu ile yönetilen C# kodu arasındaki etkileşimin farklı yöntemlerini sundum. Ayrıca MQL5 yapılarının C#'a karşı nasıl sıralanacağı ve MQL5 betiklerinde dışa aktarılan DLL işlevlerinin nasıl çağrılacağı konusunda da birkaç örnek sağladım. Sağlanan örneklerin, yönetilen kodda DLL yazma konusunda gelecekteki araştırmalar için bir temel oluşturabileceğine inanıyorum. Bu makale aynı zamanda MetaTrader'ın C#'da halihazırda uygulanmış olan birçok kütüphaneyi kullanmasına da kapı aralamaktadır.

Bileşen Nesne Modeli (COM), doksanların başlarında Microsoft tarafından tanıtılan bir ikili arabirim standardıdır. Bu teknolojinin temel fikri, farklı programlama dillerinde oluşturulan nesnenin, dahili uygulamasını bilmeden başka herhangi bir COM nesnesi tarafından kullanılmasını sağlamaktır. Bu tür gereksinim, COM'un uygulamadan tamamen ayrı katı, iyi tanımlanmış arabiriminin uygulanmasını zorunlu kılar.

Aslında COM'un yerini .NET teknolojisi aldı ve Microsoft, COM yerine .NET kullanmaya zorladı. .NET, eski kodla geriye dönük uyumluluk sağlamak için COM ile her iki yönde de işbirliği yapabilir, yani .NET COM yöntemlerini çağırabilir ve COM nesnesi .NET yönetilen kodu kullanabilir.

Bu işleve COM Birlikte Çalışabilirliği veya COM Birlikte Çalışabilirliği adı verilir. COM birlikte çalışma API'si, yönetilen System.Runtime.InteropServices ad alanındadır.

 

Şekil 2. COM Birlikte Çalışabilirlik modeli

Yazar: investeo

 
Çok faydalı bir makale! Detaylı sunum için teşekkür ederim.
 
Academic:

Çok faydalı bir makale! Detaylı sunum için teşekkür ederim.

Evet, teşekkür ederim.

Eh, Metaquotes performansı artırmaya, bayt kodundan uzaklaşmaya çalıştı... ve hala tüm programları içine yapıştırıyoruz! )))

Yazara soru: Saf MQL5 programları, DLL'ler ve .NET canavarlarının yürütme sürelerinin karşılaştırmalı testleri yapıldı mı? Onlara bir göz atmak ilginç olurdu.

[Silindi]  
alsu:

Evet, teşekkürler.

Eh, Metaquotes byte kodundan uzaklaşmak için performansı artırmaya çalıştı... ve biz hala tüm programları içine dolduracağız! )))

Yazara soru: Saf MQL5 programları, DLL'ler ve .NET canavarlarının yürütme sürelerinin karşılaştırmalı testleri yapıldı mı? Onlara bir göz atmak ilginç olurdu.

Soruya katılıyorum. MQL, VB.NET(managed), C++(managed/unmanaged), C#(managed/unmanaged) için yürütme süresiyle ilgileniyorum. Ve herkes için başka bir soru. Nerede (VB hariç - orada mümkün) kodu MQL5'ten daha hızlı bir programa veya DLL'ye değişiklik yapmadan aktarmak için dinamik dizileri kullanabilirsiniz. VB'de her şey MQL ile neredeyse aynıdır (dinamik dizilerle çalışmak için operatörler), ancak hangi diller de gerekli her şeye sahiptir?
 
merhaba,
Prensip olarak olası kaynakları açmanın çok yararlı olduğunu düşünüyorum ve bu makaleyi çok ilginç buluyorum. Ancak çok deneyimli bir programcı değilim ve bu nedenlebazı sorularımvar .

Benim bakış açıma göre yönetilmeyen kod bana bağımsız bir platform geliştirme imkanı veriyor. Ancak birisi Metatrader kullanırsa, tanımlanmış bir platforma sahip olur.

Genel olarak ve MQL5 ile birlikte yönetilmeyen kodla faydası nedir ? - Bir şeyi yanlış anladıysamlütfen beni düzeltin !


 
smartwart:
merhaba,
Prensip olarak olası kaynakları açmanın çok yararlı olduğunu düşünüyorum ve bu makaleyi çok ilginç buluyorum. Ancak çok deneyimli bir programcı değilim ve bu nedenlebazı sorularımvar .

Benim bakış açıma göre yönetilmeyen kod bana bağımsız bir platform geliştirme imkanı veriyor. Ancak birisi Metatrader kullanırsa, tanımlanmış bir platforma sahip olur.

Genel olarak ve MQL5 ile birlikte yönetilmeyen kod ile faydası nedir ? - Bir şeyi yanlış anladıysamlütfen beni düzeltin !


Merhaba Smartwart,

Bunun faydası, ticaret amacıyla kullanabileceğiniz C#'ta halihazırda geliştirilmiş büyük miktarda kod olmasıdır. Bir sonraki yazımda daha fazlasını okuyacaksınız.

Cheerz,

Investeo

 

Bu şimdiye kadarki en iyi şey! C#'ı seviyorum ve onu çalıştırmak için herhangi bir olasılık arıyordum! Yılın en iyi haberi! Sanırım bu son kez MQL5'te EA yazdığımda oldu. Tüm mantığı kütüphanelere yerleştireceğim ve tüm EA'larım için bir şablon EA.mq5 kullanacağım (sadece farklı kütüphanelerle bağlantılı olacaklar).

Teşekkür ederim!

 
alsu:

Evet, teşekkürler.

Eh, Metaquotes performansı artırmaya, bayt kodundan uzaklaşmaya çalıştı... ve biz hala tüm programları içine dolduracağız! )))

Yazara soru: Saf MQL5 programları, DLL'ler ve .NET canavarlarının yürütme sürelerinin karşılaştırmalı testleri yapıldı mı? Onlara bir göz atmak ilginç olurdu.

Hangi bytecode'dan uzaklaştılar? 4'te var mıydı? Optimizasyon olmadan sadece yavaş bir derleyici vardı.

NET altında bytecode yoktur, başlangıçta her şey belirli bir işlemci için optimizasyon ile yerel makine koduna derlenir. İlk derleme için zaman kritikse, ngen http://msdn.microsoft.com/ru-ru/library/6t9t5wcf.aspx kullanın.

Ve testler evet. ilginç olurdu

Ben şahsen açıklanan yöntemlerden sadece 2 tanesini kullanıyorum, diğerlerini sadece duydum. COM-interop'un nasıl yardımcı olabileceğini anlamadım, ancak bu muhtemelen resmin bütünlüğü içindir. Makale 5.

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

Ne tür bir bayt kodundan kaçıyorlardı? 4'te var mıydı? Optimizasyon olmadan sadece yavaş bir derleyici vardı.

MQL4 bayt koduna sahipken, MQL5 yürütülmeden önce yerel x86 veya x64'e ön derleme ile bayt koduna derlenir. MQL5 .NET gibi davranır

Bir dil olarak MQL5 daha da geliştirilecek (geliştiriciler daha fazla işlevsellik ve C++ ile daha iyi uyumluluk talep ediyor) ve optimize edicisi iyileştirilecek.

En son sürümlerde, artık kaynakları (.BMP ve .WAV) #resource aracılığıyla doğrudan EX5 dosyalarına dahil etmek mümkündür, bu da kendi kendine yeterli uygulamalar oluşturmanıza olanak tanır. Bu, MetaTrader 5 platformu için tam teşekküllü uygulamalar geliştirmek ve satmak için iyi bir temeldir. MQL5 Market'in beta sürümü yakında yayınlanacak ve herhangi bir geliştirici uygulamalarını satabilecek (sıkı denetimden sonra) ve tüm tüccarlar bu mağazaya doğrudan erişebilecek.

 

VS C# için unmanaged export şablonlarını derleyemeyen tek kişi ben miyim?

Şablonu makaleden aldım (tam değil, dll'den yoksun) ve buradan alınan R. Giesecke kütüphaneleri ile tamamladım. Giesecke kütüphaneleri buradan alınmıştır http://sites.google.com/site/robertgiesecke/Home/uploads,

R. Giesecke'den orijinal şablonu aldım. Giesecke, ayrıca iki şablonun bir karışımını yaptı, hiçbir şey çıkmadı.

Orijinal şablonu derlerken derleyici aşağıdakileri veriyor:

------ Построение начато: проект: 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 ==========

Diğer şablonları derlerken yaklaşık aynı.

Sistem: W7 x64 SP1 Home Prem Lic.

IDE: VS 2010.

Google yardımcı olmuyor (.

Proje dll'sini manuel olarak oluşturdum ve R. Giesecke'nin önerilerine göre ekledim. Giesecke, sonuç da yok.

Lütfen tavsiye ile yardımcı olun.

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 # 'ye yönetilmeyen dışa aktarma için bir şablon derlemedim mi?

Makaleden bir şablon aldı (tam değil, dll eksik değil) R kütüphanelerine ekler. Giesecke buradan alındı http://sites.google.com/site/robertgiesecke/Home/uploads ,

R. Giesecke'den orijinal şablonu aldı, iki şablonun bir karışımı gibi, çalışmıyor.

Orijinal şablonu derlerken derleyici aşağıdakileri üretir:

Diğer şablonları aynı şekilde derlerken.

Sistem: W7 x64 SP1 Home Prem Lic.

IDE: VS 2010.

Google yardımcı olmuyor (.

Dll manuel olarak bir proje oluşturur ve bunu R.'nin önerilerine uygun olarak tamamlar. Giesecke, sonuç da kullanılamıyor.

Yardım pliz tavsiye.

Merhaba kPVT,

Win7'de Windows7 - XP geriye dönük uyumluluk modu diye bir şey var mı? Eğer dll 32 bit modunda çalışıyorsa, çalışması için 64 bit olarak yeniden derlenmesi gerektiği anlamına gelir.

RGiesecke'nin kendisine stackoverflow.com'da sormaya çalışacağım.

Saygılarımla,

Investeo