i have a simple task: is it possible to write a Delphi DLL and put a .Net Assembly (with only one interface with 4 methods and one class implementing the interface) besides it and call it from the
Assembling 'C: \Usersinternal228↩AppData↩LocalTemptmpAFBEUELTest.x86.il' to DLL --> 'C:˶Usersinternal228↩Documents₎Visual Studio 2010Projects₎UnmanagedLibTest₎UELTest₎bin₎Debug₎x86UELTest.dll.
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
В данной статье я представил различные методы взаимодействия между кодом, написанным на MQL5, и управляемым кодом на C#. Также я подготовил несколько примеров маршалинга структур MQL5 для C# и примеров вызова экспортированных функций DLL в скриптах на MQL5. Приведенные примеры могут служить основой для дальнейших исследований аспектов написания DLL в управляемом коде. Эта статья также открывает двери для использования в MetaTrader 5 множества библиотек, уже реализованных на C#.
В последнее время я не просто много, а очень много экспериментирую с кодом, подходами, написаниями каких-то тестовых сценариев и приложений. Результат, конечно, всегда разный, ну да не об этом сегодня пойдет речь. Постепенно начинаешь уставать от настройки стандартных проектов. Для проекта библиотек надо удалить класс, создаваемый там по...
RGieseckeがすぐに答えてくれることを願っている。
http://stackoverflow.com/questions/4642548/how-to-use-a-net-assembly-in-delphi-without-registering-it-in-the-gac-or-com/5497058#5497058
*この記事を書いてくれて、本当にありがとう!とてもよく書けているし、たくさんの例があって、とても参考になった。
特に配列と文字列)メタトレーダー用の共有C#ライブラリがあるといいですね。(私がもっと勉強して便利なライブラリを作ったら、貢献できるかどうか考えてみます。
あなたのおかげで、試行錯誤しながら学ぶ代わりに、多くの時間を節約することができました。 あなたの知識を共有してくれてありがとう。
感謝します! :-)
こんにちは。
突然(?)私のDLL関数が「Cannot find 'Add' in 'TestMe.dll'」というエラーメッセージを返すという問題があります。これはあなたのコードを使った簡単な例です:
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices; InteropServices;
namespace Testme
{
class Test
{
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left,int right)
{
return left + right;
}
}
}
.mqlファイルで使用する:
#
int Add(int left,int right);
#import
void OnStart()
{
//---
for(int i=0; i<3; i++)
{
Print(Add(i,666));
}
}.
--> 'Testme.dll' で 'Add' が見つかりません。
私が見落としているDLLの呼び出し方の変更があるのでしょうか?
ご意見をお聞かせください。
トーマス
こんにちは。
私もいきなり問題が発生しました(最初はうまくいっていたのですが・・・)サンプルDLLをコンパイルすると
Assembling 'C: \Usersinternal228↩AppData↩LocalTemptmpAFBEUELTest.x86.il' to DLL --> 'C:˶Usersinternal228↩Documents₎Visual Studio 2010Projects₎UnmanagedLibTest₎UELTest₎bin₎Debug₎x86UELTest.dll.
ソースファイルはUNICODE
***** 失敗
UELTest
何か見落としがありますか?
Windows 7; VisualStudio 2010;
ご意見をお聞かせください。
Risan
**UPDATE**おかげさまで解決しました!
こんにちは、
C#エクスプレス2010でdllを書くために完全に手順通りにしました。 テンプレートが機能しなかったので、手動で新しいプロジェクトにdllファイルを追加したところ、すべてがうまくコンパイルされました(ここで何か間違ったのかもしれません)。
メタトレーダー4でテストしていますが、次のようなエラーが発生します:
2011.10.29 20:13:37 2000.01.03 00:00 Expert_NN_1_1 USDJPY,H1: cannot call function 'sum' from dll 'NN 1 DLL.dll'(error 127).
DLLはMT4にロードされており、確認しましたが、関数を呼び出そうとしません。 MT4でマネージドDLLを呼び出そうとすると、この問題が表示されることに気づきましたが、この記事に記載されている手順で解決するはずですよね?
助けていただけるとありがたいです。
ありがとうございました!
こんにちは、
このような素晴らしい記事を書いていただき、ありがとうございました。
ロバート・ギーゼッケのサイトの詳細はとても貴重でした。
とても勉強になりました。VB.NETの方が好きなのに、C++のラッパーを書く必要がないのは、とてもクールなことです。
ありがとう。
ありがとう、
ゴードン
こんにちは、
私も同じ問題を抱えています......私がデコレートしたメソッドがmt5で見つかりません!
私はvs2010とテンプレートを使っています。
掲載記事アンマネージドコードをエクスポートすることで、MQL5からC#の世界を開く方法:
著者:investeo
記事にあるhttps://www.mql5.com/ja/articles/249 著者のコンパイルされたdllはmt4とmt5で正しく動作します!
しかし、著者のソースから(VisualStudio 2010で)自分のコンパイルされた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));
}
//+------------------------------------------------------------------+
、どのようにテンプレートに従事することだけですか?
C-シャープでテンプレートが挿入される場所と方法を知っている人、理由はどうやらこれだけです 、どのようにテンプレートに関与するのですか?
http://softblog.violet-tape.ru/2010/05/06/visual-studio-templates/
VS2010の場合は一番下にある。
と、一番下に有益な情報がある。