1

C# Windows/Web アプリケーションから C dll を呼び出すときに奇妙な問題があります。

シナリオ: C# dll (csharp1.dll) を使用する C# Web アプリケーションがあります。この csharp1.dll は、代わりに C dll (c1.dll) からいくつかの関数を呼び出します。そして、c1.dll は代わりに、いくつかの下位関数のために別の C dll (c2.dll) を呼び出します。

詳細: csharp1.dll の実装には、次のような pinvoke 行があります。

[DllImport("c1.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
static extern unsafe internal void *openhw(int id);

ただし、c2.dll への直接参照はなく、c2.dll は c1.dll によってロードさLoadLibrary("c2.dll")れます。

問題: csharp1.dll を C# Windows コンソール アプリケーションに追加すると、正常に動作し、c1.dll および c2.dll のすべての機能を使用できます。csharp2.dll を C# Web アプリケーションに追加すると、c1.dll が読み込まれますが、c2.dll は読み込まれません。

この問題は、Web サーバー IIS から実行されている C# Web アプリケーション内で使用された場合にのみ発生します。したがって、呼び出しプロセス(IIS)がc2.dllを認識できないと考えて、c2.dllをwindowsディレクトリに配置しようとしましたが、うまくいきませんでした。LoadLibrary("c2.dll")また、通話に問題は見られません。

何がそのような問題を引き起こす可能性がありますか? そして、c1.dll と c2.dll の実装を変更せずにこれを解決するにはどうすればよいですか?

更新:信頼レベルを調整し、ShadowCopying を無効にしようとしましたが、どちらも役に立ちませんでした。

4

0 に答える 0