2016-05-03 9 views
1

私のC#アプリケーションからdllの中でC++関数を呼び出そうとしています。 dllは、ユーザーのマシンにインストールされるプログラムからのものであるため、実行時にdllをロードする必要があります。C#アプリケーションでC++ DLL関数を呼び出すときにコンテキストエラーからロードを修正する方法

デバッグアシスタント「LoadFromContext」の問題 検出したマネージド

...

追加情報:「Client.API」という名前のアセンブリがから をロードされた「(パス私は次の例外を取得していますをdllファイルに変換する ')。この コンテキストを使用すると、シリアライズ、予期しない動作(キャスト および依存関係解決)が発生する可能性があります。ほとんどの場合、LoadFromコンテキストを避けることをお勧めします。 これは、グローバルアセンブリキャッシュまたはApplicationBase ディレクトリに アセンブリをインストールし、明示的にアセンブリをロードするときはAssembly.Loadを使用して実行できます。

私はこのエラーの意味を理解していません。そして私は自分の状況のた​​めにそれを修正する方法を知らない。私はオンラインで検索しましたが、役に立つ情報はあまり見つかりませんでした。 これは、私が働いているコードされています。あなたが見る何

[DllImport("dmawin.dll")] 
private static extern int LoginDialog(IntPtr pWndParent, string pStrTitle, 
uint pFlags, [MarshalAs(UnmanagedType.LPWStr)] ref StringBuilder pStrDataSource, 
int pDSLength, string pStrUsername, string pStrPassword, string pStrSchema); 


private bool Login(string pDataSource, string pLoginName, 
string pPassword, string pScheme) 
{ 
    private const int MAX_DB_NAME = 256; 
    IntPtr handle = ParentForm.Handle; 
    var sb = new StringBuilder(pDataSource, MAX_DB_NAME); 

    //function call 
    LoginDialog(handle, null, flags, ref sb, MAX_DB_NAME, pLoginName, 
    pPassword, pScheme); 
} 

答えて

1

デバッガの設定を修正しました。この警告は、をオフに設定してください。このMDAは、通常、Assembly.LoadFrom()を使用するつもりがないときにプログラマに警告するためのものです。あなたはコードではなく何もすることができないので、注意を払う理由はほとんどありません。

VS2015では、[デバッグ]> [Windows]> [例外設定]を使用します。以前のバージョンでは、[デバッグ]> [例外]を使用します。管理デバッグアシスタントを展開し、 "LoadFromContext"を解除します。何らかの理由ですべてがチェックされている場合は、すべての設定をリセットしたい場合は、一番上のノードを2回クリックします。

FWIWは、使用するライブラリが既に.NET言語で書かれています。あなたが[DllImport]を使用する必要がないように、彼が管理されたインターフェイスをサポートしているかどうかを尋ねて、著者と話したいと思う高い確率。

1

も例外ではありません。これは、デバッガが示す警告です。デバッグせずにアプリケーションを実行すると、これはまったく表示されません。 Visual Studioでは、デバッガの例外処理設定でこれらの種類の警告を無効にすることができます。

+0

このような警告を心配する理由はありますか? – user2481095

+0

この場合ではありません。これは、dmawin.dllの内部動作に関する警告です。 – NineBerry