How can I ensure my Kotlin/Native DLL is compatible with UWP sandboxing

To ensure your Kotlin/Native DLL is compatible with UWP sandboxing when using it in a C# UWP application, follow these steps:

1. Package the DLL as Content

In your C# UWP project, add the Kotlin/Native DLL as a “Content” item. This ensures the DLL gets copied to the output directory during build.

2. Load the DLL using LoadPackagedLibrary

When loading the DLL in your C# code, use the LoadPackagedLibrary function instead of LoadLibrary. This is required for UWP sandboxing compliance.

csharp

[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr LoadPackagedLibrary(string lpFileName, uint Reserved);

3. Avoid Disallowed APIs

Make sure your Kotlin/Native DLL does not use any disallowed APIs that are not compatible with UWP sandboxing. Some examples include:

  • Accessing the file system outside of the app’s sandbox
  • Making network connections to arbitrary endpoints
  • Interacting with the registry
  • Loading other DLLs

If your DLL uses any of these APIs, try to find alternatives that are allowed in UWP apps. The Microsoft documentation lists Win32 and COM APIs for UWP apps and CRT functions not supported in UWP apps.

4. Eliminate Disallowed Functionality

If your DLL contains functionality that is not allowed in UWP apps due to sandboxing restrictions, you may need to modify the source code to eliminate those parts. This could involve removing or replacing disallowed API calls with alternatives.By following these steps, you can ensure your Kotlin/Native DLL is properly packaged, loaded, and compatible with the UWP sandboxing requirements when used in a C# UWP application.