2017-12-09 17 views
0

私はいくつかのクラウドディレクトリにあるdllをラッパーしようとしています。インターネット上のいくつかのリンクからdllをラッパー

private SafeLibraryHandle sevenZipSafeHandle; 

public SevenZipHandle(string sevenZipLibPath) 
    { 
     this.sevenZipSafeHandle = Kernel32Dll.LoadLibrary(sevenZipLibPath); 
     if (this.sevenZipSafeHandle.IsInvalid) 
     { 
      throw new Win32Exception(); 
     } 
    } 
} 

internal static class Kernel32Dll 
{ 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    internal static extern SafeLibraryHandle LoadLibrary([MarshalAs(UnmanagedType.LPTStr)] string lpFileName); 

    [DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)] 
    internal static extern IntPtr GetProcAddress(SafeLibraryHandle hModule, [MarshalAs(UnmanagedType.LPStr)] string procName); 

    [SuppressUnmanagedCodeSecurity] 
    [DllImport("kernel32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    internal static extern bool FreeLibrary(IntPtr hModule); 
} 

私はdllファイルを検証していますが、私が使用している場合:

sevenZipLibPath = “c:/temp/file.dll” 

それが正常に動作します。

しかし、のようなインターネット上にあるいくつかのファイルを使用する場合:

sevenZipLibPath = “"http://any.blob.core.windows.net/files/file.dll” 

それは動作しませんが。

このような状況で、クラウドドライブからDLLファイルを確認するにはどうすればよいですか?

答えて

0

LoadLibrary関数 https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx URLだけでなく、ファイルパスのみをサポートしています。

したがって、まず一時的な場所にダウンロードしてください。また、webclientクラスを使用してコード内で行うこともできます。 簡単な例: https://stackoverflow.com/a/525372/4640588

編集 - 例あなたが後でそれを削除し、それを検証

using (WebClient client = new WebClient()) 
{ 
    client.DownloadFile(
     "http://any.blob.core.windows.net/files/file.dll", 
     "c:/temp/file.dll"); 
} 

を提供されたパスを使用しました。

+0

青空関数について考える。その一時的な場所はどのようになりますか? – Billy

+0

ファイルをtempPathにダウンロードしました。私はコンソールプロジェクトでそれを実行する場合、それは正常に動作します。しかし、私がAzure Functionプロジェクトでそれを実行すると、ファイルはLoadLibraryから "isInvalid"を返します。 – Billy

関連する問題