C#でDLLの関数を作りたいです。


具体的にはMetaTraderという投資ソフトから、C#の関数を呼びたいのです。

http://wikiwiki.jp/fxmemo/?DLL%A1%A7MT4%20%A4%AB%A4%E9%20DLL%20%A4%F2%B8%C6%A4%D3%BD%D0%A4%B9

こちらに親切な方が、そのやり方を書いてくれていますが、知識不足なためよく分かりません。プロの方が見ればすぐ分かるかもしれません。DLLの種類は何になりますか?COMというものでしょうか?

MetaTraderからDLLを呼び出す方法は検索で出てきますので分かります。それに対応するDLLの作り方が分からないのです。VC# 2008を使っていまして「C# DllExport」などと検索しても、C++でのサンプルばかりで、C#のものは出てきません。

ある関数をMetaTraderから呼び出せるDLLのサンプルを提示してください。C#だけでは無理なのでしたら、C++のコードも混ぜて良いのですが、そしたらC#へさらに制御を渡す部分もつけて頂きたいです。宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/06/02 07:03:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

ポイント35pt

コメントが空いていないので、こちらに失礼します。

はずしているかもしれませんが、たぶん、ご期待のことはできないと思います。

C#でのDLLの作成自体は比較的簡単で、次のページを見てもらえれば、分かると思います。

http://msdn.microsoft.com/ja-jp/library/3707x96z(VS.80).aspx

問題なのは、MetaTraderというのが、おそらく、ネイティブアプリだということです。

呼び出し元(MetaTrader)を変更できないのであれば、その呼び出し規約は変えられないので、ネイティブDLLを作成する必要があるでしょう。

なので、可能性としては、

MetaTrader -> Native DLL(C++/CLIで作成) -> CLR DLL (C#で作成)

という流れではいけるのかもしれませんが、Native DLLからCLR DLLを呼び出せるかどうか、はちょっと未確認です。

現実的な方法としては、C#の関数を利用する部分を単独のアプリケーションとしてしまい、

MetaTrader -> Native DLL(C++で作成) == 起動 ==> C#アプリケーション

という形で、DLLが別プロセスとして、起動したアプリケーションとやりとりする方がいいのかもしれません。


このあたりは、「C#の関数を呼びたい」ということの意味によっても変わってきます。


よく分からない部分などあれば、コメントあけてもらえれば、補足します。

id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント35pt

C#によるDLL作成方法については、tdoiさんが回答しています。


次にC#で作成したDLLを呼び出す方法ですが、MetaTraderがCOM呼び出しをしているとしたら、タイプライブラリ(TLB)ファイルを作成し、Regasm.exeを使ってアセンブリ登録することで対応できるかもしれません。(自信はありませんが)

具体的な手順は「C から C# のクラスを呼び出す方法 」を参考にしてください。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません