2017-08-10 45 views
1

C#UWPアプリケーションからアンマネージドDLLからメソッドを呼び出そうとしています。私はこれを行うが、私はそれを使用することができますので、アンマネージドDLLに "LoadLibrary()"ピンポンキング。すべてのリリースモードでただし、デバッグモードで正常に動作UWP C#アプリケーションのpinvokeを使用したLoadLibraryの呼び出し

これ、私は好奇心のエラーが表示されます。

メッセージ:クラスの初期化メソッドTests.UnitTests.InitializeClientが例外を投げました。 System.TypeLoadException:System.TypeLoadException:UWPアプリケーションで使用できないため、アセンブリ 'Client、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null'の未解決のP/Invokeメソッド 'LoadLibrary!kernel32'。

[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] 
    public static extern IntPtr LoadLibrary(string librayName); 
:ここ

はロードライブラリをPInvokeのために私の方法..です別のAPIを使用するか、非UWPアプリケーションAPIを使用しての意味を理解することを示すために、[DLLIMPORT(ExactSpelling = true)を使用するかしてください私は以下のように "ExactSpelling = true" を追加した場合

残念ながら、:

System.EntryPointNotFoundEx:次に呼び出す

[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)] 
    public static extern IntPtr LoadLibrary(string librayName); 

それが例外をスローしますception: 'DLL' kernel32 'で' LoadLibrary 'というエントリポイントを見つけることができません。'

ご協力いただきありがとうございます。代わりに

+1

実際、kernel32.dll' 'で' LoadLibrary'という名前のエントリポイントがありません。 2つのものがあります:ANSI文字列の 'LoadLibraryA'とUnicode文字列の' LoadLibraryW'です。あなたは後者が欲しい。しかし、それが動作する保証はありません*。私が集めたものから、あなたはUWP上で['LoadPackagedLibrary'](https://msdn.microsoft.com/library/windows/desktop/hh447159)を使うはずです(しかし私はUWP開発者ではありません)。 –

+0

LoadLibraryW()はUWPアプリケーションの* verboten *です。あなたのアプリは認定を受けることができず、店を通じて販売して展開することはできません。 –

+0

それは確かですか?私はLoadLibraryWを[DllImport( "API-MS-WIN-CORE-LIBRARYLOADER-L2-1-0.DLL"、SetLastError = true)]インポートを介して読み込むことができました。 – TheJeff

答えて

2

使用LoadPackagedLibrary:

[DllImport("API-MS-WIN-CORE-LIBRARYLOADER-L2-1-0.DLL", SetLastError = true)] 
public static extern IntPtr LoadPackagedLibrary([MarshalAs(UnmanagedType.LPWStr)]string libraryName, int reserved = 0); 
+0

メッセージ:クラスの初期化メソッドTests.UnitTests.InitializeClientが例外をスローしました。 System.EntryPointNotFoundException:System.EntryPointNotFoundException:DLL 'API-MS-WIN-CORE-LIBRARYLOADER-L2-1-0.DLL'で 'LoadLibraryPackaged'という名前のエントリポイントを見つけることができません.. – TheJeff

+0

申し訳ありませんが、私は誤字を犯しました。今修正されました。 – Sunius

関連する問題