Visual studio 从UWP应用程序调用DLL中的fopen()返回空指针。GetLastError()返回错误\u访问被拒绝

Visual studio 从UWP应用程序调用DLL中的fopen()返回空指针。GetLastError()返回错误\u访问被拒绝,visual-studio,visual-c++,uwp,windows-10,c++-cx,Visual Studio,Visual C++,Uwp,Windows 10,C++ Cx,我正在开发一个从DLL调用函数的UWP应用程序。它为函数提供了应用程序安装路径,以便我可以继续向它写入一些数据 我使用导入DLL,如中所述 我使用Windows::Storage::StorageFolder^installedLocation=Windows::ApplicationModel::Package::Current->installedLocation检索了路径 但是,当我尝试使用fopen打开文件并获取其句柄时,会得到一个空指针。我使用GetLastError()检索错误代码,

我正在开发一个从DLL调用函数的UWP应用程序。它为函数提供了应用程序安装路径,以便我可以继续向它写入一些数据

我使用导入DLL,如中所述

我使用
Windows::Storage::StorageFolder^installedLocation=Windows::ApplicationModel::Package::Current->installedLocation检索了路径

但是,当我尝试使用
fopen
打开文件并获取其句柄时,会得到一个空指针。我使用
GetLastError()
检索错误代码,它返回
error\u ACCESS\u DENINED
error


这可能是什么原因?我错过什么了吗?我是否需要声明其他功能以确保DLL可以访问应用程序安装路径中的文件

写入UWP应用程序的安装文件夹受设计限制。这是为了确保应用程序安装的完整性,并实现应用程序包的无缝、增量自动更新

如果要写入数据,则需要将其写入应用程序的appdata位置,而不是安装位置。

fopen()
依靠
CreateFile
完成实际工作
CreateFile
只知道如何处理文件系统ACL,而不知道如何处理基于功能的UWP权限,因此对于AppData目录(用于读/写访问)或安装位置(用于只读访问)以外的任何内容,它总是会失败


有一种方法,但它不适用于
fopen()
,除非您愿意静态链接CRT,这有其缺点。例如,您无法获得自动安全修补程序的好处,并且可能无法通过Microsoft应用商店进行分发。

我阅读了有关文件访问权限的MSFT文档。我知道有两个默认文件权限不需要额外声明。
AppData
文件夹和
下载
文件夹。还有人提到,该应用程序可以访问它创建的文件或文件夹。因此,我从UWP应用程序中创建了一个文件(例如,在Downloads文件夹中),并给出了它在DLL中的函数路径。但是,我仍然看到相同的错误。因为我无法
fopen
在DLL中提供给函数的文件,所以我尝试检查它是否在UWP应用程序中工作。我使用
CreateFileAsync
在下载文件夹中创建了一个文件,并提供了文件路径到
fopen
函数,但它仍然返回一个
NULL
。我也试着在AppData文件夹中做同样的事情。这次
fopen
给了我一个文件句柄。当DLL中的函数尝试执行相同的操作时,为什么它不工作?当DLL中的函数访问本地文件夹时,您可以从fopen获得句柄吗?是否会出现同样的问题?@Faywang MSFT每当我尝试从DLL中的函数
fopen()
时,无论我给它什么路径,它都无法获得句柄。当我从DLL中的函数将AppData目录传递到fopen()时,它可以返回句柄。你能提供一个可以复制的简单样品吗?