4

独自のアンマネージ C++ dll を Silverlight 5 プロジェクトに使用する必要があります。

dllImport ieを使用して使用できるので

   [DllImport(@"D:\myLib\Debug\myLib.dll")]
    static extern int add(IntPtr ptr);

DllImport で絶対パスを指定したので、問題なく動作します。しかし、私の問題は、相対パスを使用したいということです。

Silverlight 5 プロジェクトにアンマネージ C++ dll を追加し、そこからパスを指定する必要があるためです。この問題の解決策が見つからなかった過去 2 日間から調査しています。

下記の関連リンクを 1 つだけ見つけましたが、これも役に立ちません。

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.dllimportattribute.aspx

アンマネージド dll をマネージド アセンブリに埋め込む方法を示唆しているように。このアプローチを試しましたが、「BadImageException」が発生しています。

私にとって本当に緊急なので、この問題に来ることを提案してください。

ありがとう、

ビピン

4

1 に答える 1

1

Silverlight 5 Release Candidate が公開されたとき、管理されていない非システム DLL を Silverlight 5 RC アプリケーションにバンドルするというこの問題を処理するためのサポート メソッドをいくつか作成しました。Microsoft は Silverlight 5 RTM のバンドルの問題に対処するためのサポートを追加していないため、このソリューションは引き続き有効です。

基本的には、アンマネージ DLL をリソース ファイルとしてバンドルします。アプリケーション起動イベント ハンドラなどで手動で呼び出されるヘルパー メソッドを介して、リソースはディスク上の事前定義された場所にコピーされます。この場所は、実行中にシステム PATH にも含まれます。

高い信頼が必要です (もちろん)。

このソリューションの詳細については、このブログ投稿を参照してください。

サンプル テストを含む、このソリューションに関連するすべてのコードは、 Githubで見つけることができます。

アップデート

以下の Simon Mourier のコメントで指摘されているように、DLL がリソースからアンパックされた後にKernel32 LoadLibrary関数を呼び出して、アンマネージ DLL をメモリにロードする (そしてアプリケーションの終了時に解放する) という 1 つのオプションもあります。Silverlight のこのアプローチについては、このブログ投稿で詳しく説明しています。

于 2013-03-13T06:49:31.537 に答える