3

メモリにネイティブ DLL (C で記述) をロードする必要がある .NET 4.0 で記述されたアプリケーションがあります。

現時点では、LoadLibrary への P/Invoke 呼び出しを使用して、DLL が配置されているパスを渡しています。

これは機能しますが、この DLL は DB に由来するため、ファイル システムのどこかに DLL を保存する必要を回避して、ストリームを介してロードできるかどうかを知りたいです。

4

2 に答える 2

2

Windows ではこれが許可されていません。ネイティブ コードは常にディスク上のファイルからロードする必要があります。これは、オペレーティング システムが設計された方法の中核であり、実行可能ファイルはメモリ マップ ファイルを通じてメモリにマップされます。ファイルが必要です。

ILはネイティブコードではなくデータであるため、純粋なマネージドコード(Assembly.Load(byte []))でのみ機能します。

DLL を dbase に格納することは避けてください。UAC やウイルス スキャナ、または IT スタッフはどこからともなく現れた実行可能ファイルに非常に不満を持っているため、通常はディスクに書き込むことはできません。開発マシンでは動作しますが、ユーザーのマシンでは可能性が非常に低くなります。

于 2012-05-18T10:26:54.773 に答える
0

PInvoke属性の使用法でファイル名を指定しているため、これは不可能です。PInvokeには、静的に認識されているファイル名が必要です。

ファイル名を静的に決定できない場合は、LoadLibraryとGetProcAddressを使用してdllに含まれる関数を呼び出す必要があります。

または、反射放出を使用して、PInvoke関数を動的に放出することもできます。

于 2012-05-18T08:55:57.953 に答える