我需要使用_wfopen_s
函数打开存储在我的应用程序包中的文件,但该文件返回FILE
带有NULL的对象_ptr
。事情是这样的:
var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("test\\test.ext");
var nativeWorker = new NativeWorker(file.Path);
<...>
auto err = _wfopen_s(&this->_myFile, fileName->Data(), L"rb");
在err
返回的是0,但调试器显示有一个错误在什么地方msvcr110d.dll发生,并且所有字段this->_myFile
都为NULL,除了_flag
那等于1,_file
这等于3。
为了找出文件本身是否有问题,我编写了一个类似于以下内容的代码段:在使用cpp升级WP8上的应用程序时,如何防止丢失保存的数据。看起来像这样:
FILE *tmp;
auto tmpPath = Windows::Storage::ApplicationData::Current->LocalFolder->Path + "\\tmp.txt";
auto tmpErr = _wfopen_s(&tmp, tmpPath->Data(), L"w");
结果几乎相同,除了now的_flag
属性tmp
等于2。
我正在创建一个标准的XAML应用程序,而这是在Windows Phone运行时组件内部完成的。但是我很确定不是这种情况,因为我已经创建了3D本机应用程序,并且在那里也发生了同样的情况。它甚至发生在单元测试项目中引用的Windows应用商店运行时组件中。
我不能拒绝使用FILE
struct,因为它是由我使用的第三方DLL请求的。也许我错过了一个权限,或者也许有一种将WinRT转换为的方法IRandomAccessStream
,FILE
所以我只能使用StorageFile
的API?最后一个会让我的生活更加轻松:)
好吧,问题是缺乏经验:)好像我编译的第三方DLL使用的C ++运行时不同于Windows运行时组件,因此问题是FILE *指针不兼容。解决方案是要么不从WinRT组件传递FILE *指针指向该DLL(并使用其他功能),要么尝试使用相同的运行时构建DLL和WinRT组件(尽管我不确定这是可能的,因为似乎Windows运行时组件使用特殊的“应用”运行时)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句