Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你会用C++;UWP中C#代码中的dll?_C#_C++_Dll_Uwp - Fatal编程技术网

你会用C++;UWP中C#代码中的dll?

你会用C++;UWP中C#代码中的dll?,c#,c++,dll,uwp,C#,C++,Dll,Uwp,我在VisualStudio中编写了一个C++类库,它定义了一个调用一些Python的函数: #pragma once #include <Python.h> extern "C" __declspec(dllexport) void python() { Py_Initialize(); PyRun_SimpleString("2 + 2"); } 该应用程序处于发布配置中 每当我尝试在本地计算机上运行应用程序时,它总是给出一个错误: The program

我在VisualStudio中编写了一个C++类库,它定义了一个调用一些Python的函数:

#pragma once

#include <Python.h>

extern "C"
__declspec(dllexport)
void python()
{
    Py_Initialize();
    PyRun_SimpleString("2 + 2");
}
该应用程序处于发布配置中

每当我尝试在本地计算机上运行应用程序时,它总是给出一个错误:

The program '[2272] StartupApp.exe' has exited with code -1073741790 (0xc0000022).
Activation of the Windows Store app 'ab6a8ef2-1fa8-4cc7-b7b3-fb7420af7dc3_7dk3a6v9mg4g6!App' failed with error 'The app didn't start'.
我的问题是:我能引用C语言UWP项目中的C++类库吗?或者UWP应用程序上的安全性不允许这样做

还是因为Python.h

编辑:

我使用DLL项目和包装它的运行时组件构建了该项目,现在出现以下错误:

“系统”类型的异常

'System.DllNotFoundException' occurred in StartupApp.exe but was not handled in user code

Additional information: Unable to load DLL 'pathtodll': Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

我用对象名“每个人”添加了一个DLL用户(我不知道如何给每个人权限),但是错误仍然出现。

< P>首先,UWP不能只消耗DLLImport遗留的C++ DLL。

如果你想将传统C++函数暴露给C++,第一个建议就是用WRET组件包装C++逻辑。然后,您可以通过以下步骤在UWP应用程序中引用此组件:将其添加到项目中,在“解决方案资源管理器”窗口中打开文件的属性,并将其标记为要包含在应用程序包中的内容。会有帮助的。提供更详细的步骤

如果要PInvoke dll,可以执行以下步骤(您可以参考此步骤):

  • 将win32 dll添加到UWP项目中,确保将其类型设置为“内容”

  • 然后在正确的cs文件中,使用DllImport对dll进行PInvoke


  • 还有一件事:您需要确保您的Python dll没有在WinRT中使用禁止的API。您可以使用dll的/ZW compile选项来检查这一点。

    模块是本机的,并且本机调试当前处于禁用状态。您是否尝试启用本机调试?我使用了第二篇文章。我需要哪个DLL来DllImport,是DLL通用项目中的DLL,还是运行时组件中的DLL。对于/ZW:DLL或运行时组件项目也是一样(请原谅我的问题,我对.NET不是很熟悉)。你最好也读第一篇文章。它解释了将传统C++ DLL移植到UWP的不同方法。请尝试这些步骤以确保DLL被正确添加:将DLL添加到项目中,在解决方案资源管理器窗口中打开DLL的属性,并将其标记为包含在应用程序包中的内容。(项目-Win32类库DLL-位于不同的目录中)。然后,在属性中,我在“高级”->“构建操作”中选择了“内容”。在“复制到输出目录”中,我选择了“不复制”。在我的C#中,我使用DLL的完整路径。C#代码DllImport是DLL并调用它(在它之前没有指定任何命名空间).Access Denied表示应用程序包中未包含您的DLL。请确保该二进制文件包含在项目中并标记为内容,然后在生成后再次检查它是否在Appx中。应用程序无法从其他位置读取或加载任意DLL。此外,您还需要确保您调用的API允许用于UWP和Windows Runtime应用程序。这可以通过使用/ZW编译DLL来检查。此链接有助于找到兼容的API:
    'System.DllNotFoundException' occurred in StartupApp.exe but was not handled in user code
    
    Additional information: Unable to load DLL 'pathtodll': Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))