通过 C++ cli DLL 在 UWP 中访问文件
file access in UWP through c++ cli DLL
我有一个 wpf 应用程序,它使用用 C++/CLI 创建的 DLL。
DLL 从安装文件夹中读取文件。它在启动时执行此操作而不使用文件选择器。
实际上DLL使用OpenCV,我调用了一个opencv函数来加载文件。
我这样做..
std::string pathUnmanged = msclr::interop::marshal_as<std::string>(file)
然后将 pathUnmanaged
传递给加载文件的 OpenCV 函数。
这里path
只是文件名和扩展名。
这在发布版本中对我有用。但是,如果我使用桌面桥转换为 windows 商店应用程序 UWP,则文件不会加载。
有人能给我指出正确的方向吗?
在WPF发布模式下,当你点击你的exe启动你的应用程序时,当前目录被设置为与exe相同的文件夹,所以程序可以使用"filename.ext".[=12定位文件=]
但是,将其打包到商店应用程序后,当前目录可能其他地方。
您可以将此行添加到 WPF 程序的 Main 方法中以检查当前目录在哪里。
MessageBox.Show(Environment.CurrentDirectory);
如果是这样,请使用文件的完整路径。可以通过这种方式获取完整路径
var fullFileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),
"filename.ext");
我用 C# 编写,但您可以轻松地将其转换为 C++/CLI。
我有一个 wpf 应用程序,它使用用 C++/CLI 创建的 DLL。
DLL 从安装文件夹中读取文件。它在启动时执行此操作而不使用文件选择器。
实际上DLL使用OpenCV,我调用了一个opencv函数来加载文件。
我这样做..
std::string pathUnmanged = msclr::interop::marshal_as<std::string>(file)
然后将 pathUnmanaged
传递给加载文件的 OpenCV 函数。
这里path
只是文件名和扩展名。
这在发布版本中对我有用。但是,如果我使用桌面桥转换为 windows 商店应用程序 UWP,则文件不会加载。
有人能给我指出正确的方向吗?
在WPF发布模式下,当你点击你的exe启动你的应用程序时,当前目录被设置为与exe相同的文件夹,所以程序可以使用"filename.ext".[=12定位文件=]
但是,将其打包到商店应用程序后,当前目录可能其他地方。
您可以将此行添加到 WPF 程序的 Main 方法中以检查当前目录在哪里。
MessageBox.Show(Environment.CurrentDirectory);
如果是这样,请使用文件的完整路径。可以通过这种方式获取完整路径
var fullFileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location),
"filename.ext");
我用 C# 编写,但您可以轻松地将其转换为 C++/CLI。