人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ネイティブアプリケーションからマネージドDLL(C#)を呼び出す方法(ズバリ2000P)

私にとって大きな壁に突き当たり1ヶ月が過ぎてしまいました、どなたか助けて頂けませんでしょうか。

ベストなズバリサンプルコードを頂いた方に追加で2000P差し上げたいと思います。

Mail : metatrader4.0\gmail.com (\=@)

※はてな会員以外の方でサンプルコードを頂ける場合は、paypal か 銀行振り込みで 2000P = 2000円を差し上げます。
ご連絡下さい。


質問文字数制限のためコメント欄に【本題】を記入いたします。


●質問者: I-_-I
●カテゴリ:コンピュータ インターネット
✍キーワード:C# DLL Gmail Paypal はてな
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● miyamuko
●800ポイント

サンプルコードではありませんが、クラッシュする原因はたぶん以下のとおりだと思います。

V. Testing the DLLs in MetaTrader 4 にも書いてありますが、

CSharpAssembly.dll と CppStdcallInerfaceWrapper.dll を experts\libraries に置いていませんか?


CSharpAssembly.dll は Terminal.exe -> CppStdcallInerfaceWrapper.dll -> CSharpAssembly.dll

と呼び出されますが、Terminal.exe は CSharpAssembly.dll を見つけることができないため

クラッシュしています。


dll を MetaTrader のインストールディレクトリ(Terminal.exe と同じ場所)に置くと動くと思います。

ちなみに、CLR は以下の順で DLL を検索します (CLR は環境変数 PATH を利用しません)。

  1. GAC(Global Assembly Cache)と呼ばれる共有スペース
  2. 構成ファイルの<codeBase>に記述されている場所
  3. アプリケーションが存在するディレクトリ以下で「アセンブリ名+.dll/.exe」

http://codezine.jp/article/detail/2236


あと、Explanations about the Step-by-Step Guide に書いてあることは要約すると以下のようになります。

◎質問者からの返答

ありがとうございます!!!

てっきりCppStdcallInerfaceWrapper.dllがCSharpAssembly.dllを呼び出すから同じフォルダと思い込んでいました。CLRのDLL検索順序勉強になりました。

CLRのDLL検索順序は大変勉強になりました。

本当にありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ