具体的には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#へさらに制御を渡す部分もつけて頂きたいです。宜しくお願いします。
コメントが空いていないので、こちらに失礼します。
はずしているかもしれませんが、たぶん、ご期待のことはできないと思います。
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#の関数を呼びたい」ということの意味によっても変わってきます。
よく分からない部分などあれば、コメントあけてもらえれば、補足します。
C#によるDLL作成方法については、tdoiさんが回答しています。
次にC#で作成したDLLを呼び出す方法ですが、MetaTraderがCOM呼び出しをしているとしたら、タイプライブラリ(TLB)ファイルを作成し、Regasm.exeを使ってアセンブリ登録することで対応できるかもしれません。(自信はありませんが)
具体的な手順は「C から C# のクラスを呼び出す方法 」を参考にしてください。
コメント(0件)