私はASP.NET WebサイトでVisual Studio 2010で開発中です。ほとんどのサイトは管理コード(F#およびC#)で書かれていますが、その機能の一部にアンマネージDLL(QuickPDF)を使用します。サイトはローカルで正常に動作しますが、ホスティングプロバイダ(aspnethosting.co.uk)に展開すると、LoadLibrary呼び出しが失敗し、IntPtr.Zeroのハンドルが返されます。ASP.NET WebサイトでLoadLibraryを使用してアンマネージDLLをロード
ホスティングプロバイダのコンソールによれば、サイトは完全(内部)の信頼レベルで実行されています。
DLLはWebサイトのbinディレクトリにあり、ホスティングプロバイダは適切な権限を持っていることを通知します。
私は、\。を使用してDLLに特定のパスを一切使用せず、現在のアセンブリパスがAssembly.GetExecutingAssembly()を使用しているかどうか試しました。CodeBase(下のF#コードを参照)ローカルで実行しているとき
この問題を解決するために他に何かできることはありますか?
はここDLLへのパスをうまくいくF#コードです:F#コードは、そのパスを使用していますどこ
let assemblyDirectory =
let codeBase = Assembly.GetExecutingAssembly().CodeBase;
let uri = new UriBuilder(codeBase)
let path = Uri.UnescapeDataString(uri.Path)
Path.GetDirectoryName(path)
はここだ(それはDLLを指して確認した)
let dllPath = Path.Combine(assemblyDirectory, "QuickPDFDLL0814.dll")
if not (File.Exists(dllPath)) then
failwith ("Could not find QuickPDF DLL at: " + dllPath)
let lib = QuickPDFDLL0814.PDFLibrary(dllPath)
がここにありますQuickPDF dllを読み込もうとするC#コード - これが失敗する場所です。 dllHandleはIntPtr.Zeroと等しくなります。
public PDFLibrary(string dllFileName)
{
dll = new DLL(dllFileName);
if (dll.dllHandle != IntPtr.Zero)
{
instanceID = dll.QuickPDFCreateLibrary();
dll.RegisterForShutdown(instanceID);
}
else
{
dll = null;
}
}
...
public DLL(string dllFileName)
{
dllHandle = LoadLibrary(dllFileName);
if (dllHandle == IntPtr.Zero)
throw new InvalidOperationException("Could not load library " + dllFileName);
else
{
Marshal.GetLastWin32ErrorはLoadLibrary関数の呼び出し –
アントニオ後に返すものだ見る - ヒントをありがとう。それは0を返します。それが私に不幸にも何を伝えているのか分かりません。 – Kit