トップ回答者
UWPアプリからも使用できるWin32 DLLの開発は可能か

質問
回答
-
FYI
---------------------------------------------------
方法: ユニバーサル Windows プラットフォーム アプリで既存の C++ コードを使用する
https://docs.microsoft.com/ja-jp/cpp/porting/how-to-use-existing-cpp-code-in-a-universal-windows-platform-app?view=vs-2019UWP アプリは保護された環境で実行されるため、プラットフォームのセキュリティを損なう可能性がある多くの Win32、COM、および CRT API の呼び出しは許可されていません。
/ZW
オプションが使用されていると、コンパイラはこのような呼び出しを検出し、エラーを生成することができます。---------------------------------------------------
-
ローカルでビルドするだけであれば別に読み込めると思いますが、ストアの審査には通らないかもしれません。
LoadLibrary および LoadLibraryEx は承認されていない API だと、海外のスレッドで言及されています ので。----
They are just processes with limited ACLs. API validation is performed by the WACK tool which examines the DLL imports/exports from the package EXE and the package DLLs against the approved list of APIs. Arbitrary DLL loading *outside* of the package is not supported (hence why LoadLibrary/LoadLibraryEx itself is not an approved API).
----
別記事:https://stackoverflow.com/questions/33489924/can-you-use-c-dlls-in-c-sharp-code-in-a-uwp
C# の DllImport の場合、禁止された API を使っていなければ、content に含めておけば OK とも読めますね。
UWP の場合は内部的に LoadPackagedLibrary に変わるのかな?Firstly, UWP can't consume a legacy C++ dll just by DLLImport.
If you want to PInvoke the dll, you can follow these steps (You can refer to this MSDN post):
(中略)
1. Add win32 dll into your UWP project making sure to set its type as 'content'
2. Then in the proper cs file, using DllImport to PInvoke the dll.- 編集済み AzuleanMVP, Moderator 2020年2月13日 12:43
- 回答の候補に設定 kumo-msftMicrosoft contingent staff, Moderator 2020年2月18日 6:37
- 回答としてマーク cdefg 2020年2月19日 2:09
すべての返信
-
FYI
---------------------------------------------------
方法: ユニバーサル Windows プラットフォーム アプリで既存の C++ コードを使用する
https://docs.microsoft.com/ja-jp/cpp/porting/how-to-use-existing-cpp-code-in-a-universal-windows-platform-app?view=vs-2019UWP アプリは保護された環境で実行されるため、プラットフォームのセキュリティを損なう可能性がある多くの Win32、COM、および CRT API の呼び出しは許可されていません。
/ZW
オプションが使用されていると、コンパイラはこのような呼び出しを検出し、エラーを生成することができます。---------------------------------------------------
-
回答ありがとうございます。
頂いたURLのドキュメントを確認しましたが、UWPアプリでWin32のDLLを使用する場合、DLLのソースを移植しUWPプロジェクトとして認識させるとなっており、Win32 DLLをそのままUWPアプリから使用することについては言及されていないようでした。(Win32 DLLをプロジェクトに含み、LoadPackagedLibraryを使用する方法については、ユーザアプリ負担が大きく難しいです)
実際にC#のUWPアプリからP/InvokeによりWin32 DLLにアクセスしてみたところ、問題なくアクセスできていますが、この手法が設計的に正しいか (保証されているか) が疑問なので、質問させて頂いております。
-
ローカルでビルドするだけであれば別に読み込めると思いますが、ストアの審査には通らないかもしれません。
LoadLibrary および LoadLibraryEx は承認されていない API だと、海外のスレッドで言及されています ので。----
They are just processes with limited ACLs. API validation is performed by the WACK tool which examines the DLL imports/exports from the package EXE and the package DLLs against the approved list of APIs. Arbitrary DLL loading *outside* of the package is not supported (hence why LoadLibrary/LoadLibraryEx itself is not an approved API).
----
別記事:https://stackoverflow.com/questions/33489924/can-you-use-c-dlls-in-c-sharp-code-in-a-uwp
C# の DllImport の場合、禁止された API を使っていなければ、content に含めておけば OK とも読めますね。
UWP の場合は内部的に LoadPackagedLibrary に変わるのかな?Firstly, UWP can't consume a legacy C++ dll just by DLLImport.
If you want to PInvoke the dll, you can follow these steps (You can refer to this MSDN post):
(中略)
1. Add win32 dll into your UWP project making sure to set its type as 'content'
2. Then in the proper cs file, using DllImport to PInvoke the dll.- 編集済み AzuleanMVP, Moderator 2020年2月13日 12:43
- 回答の候補に設定 kumo-msftMicrosoft contingent staff, Moderator 2020年2月18日 6:37
- 回答としてマーク cdefg 2020年2月19日 2:09
-
cdefgさん、こんにちは。フォーラムオペレーターのクモです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
本件、皆様より参考になる投稿が寄せられたようでなによりです。
[回答としてマーク]機能は設定された投稿が後から参照しやすくなりますので、
同じ問題でお困りの方のためにも参考になった投稿に設定いただけますと幸いです。
お手数ですが、ご協力の程どうかよろしくお願いいたします。
引き続きMSDNフォーラムをご利用いただけますようお願い申し上げます。MSDN/ TechNet Community Support Kumo ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~