Visual studio 从UWP应用程序调用DLL中的fopen()返回空指针。GetLastError()返回错误\u访问被拒绝
我正在开发一个从DLL调用函数的UWP应用程序。它为函数提供了应用程序安装路径,以便我可以继续向它写入一些数据 我使用导入DLL,如中所述 我使用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()检索错误代码,
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()时,它可以返回句柄。你能提供一个可以复制的简单样品吗?