デスクトップアプリ向けのネイティブDLLソースコード(C++)を、UWPで使用、配布できるようにしています。
Universal Windowsのクラスライブラリでラップした形での配布になりますが、ネイティブDLLの関数を実行すると次の参照エラーが発生してしまい、動作しない状態です。
System.DllNotFoundException: Unable to load DLL 'MyDll.dll': 指定されたモジュールが見つかりません。 (Exception from HRESULT: 0x8007007E)
at MyDllWrapperLib.MyDllWrapper.nativeMethod()
at MyDllWrapperLib.MyDllWrapper.MyDllInit()
at App1.MainPage..ctor()
at App1.App1_XamlTypeInfo.XamlTypeInfoProvider.Activate_0_MainPage()
at App1.App1_XamlTypeInfo.XamlUse
参照のテストをしている段階なので、ほとんど空のソースコードですが公開します。
c#
1// MainPage.xaml.cs 2namespace App1 3{ 4 public sealed partial class MainPage : Page 5 { 6 public MainPage() 7 { 8 this.InitializeComponent(); 9 10 MyDllWrapperLib.MyDllWrapper.Initialize(); 11 } 12 } 13}
C#
1// MyDllWrapperLib.cs 2namespace MyDllWrapperLib 3{ 4 public class MyDllWrapper 5 { 6 [DllImport("MyDll.dll")] 7 private extern static short nativeMethod(); 8 9 public static bool Initialize() 10 { 11 return MyDllInit(); 12 } 13 private static bool MyDllInit() 14 { 15 if (nativeMethod() == 100) 16 return true; 17 return false; 18 } 19 } 20}
C++
1// MyDll.h 2#pragma once 3extern "C" { 4 __declspec(dllexport) 5 __int32 nativeMethod(); 6}
C++
1// MyDll.cpp 2#include "pch.h" 3#include "MyDll.h" 4__int32 nativeMethod() 5{ 6 return 100; 7}
フォルダ構成は以下の通りです。
' - App1.sln
' + App1
' - App1.csproj
' - (MainPage.xml、Package.appxmanifestなど)
' + bin\x64\Debug
' - App1.exe
' - MyDllWrapperLib.dll
' + x64
' + Debug
' - MyDll.dll
' + Release
' - MyDll.dll
App1\bin\x64\Debug\にMyDll.dllを配置したりもしましたが結果は同じでした。
MyDllには/ZWオプションをつけてビルドしています。
※MyDllとMyDllWrapperLibのプロジェクトをApp1のソリューションに追加したときは、MyDllのプロジェクトIDをMyDllWrapperLib.csprojに直接記述して無理やりMyDllを参照に追加することはできました。
(Visual StudioでMyDllプロジェクトを参照に追加しようとすると、「有効なアセンブリまたはCOMコンポーネントを指定してください」というエラーで追加できません)
MyDllWrapperとMyDllの接続ができていないためと思いますが。。
恐れ入りますがご教授の程よろしくお願いいたします。
・開発環境
Windows 10 Pro 1083
Microsoft Visual Studio Professonal 2017
あなたの回答
tips
プレビュー