将控制台应用程序更改为 Windows 应用程序后 fopen 失败
Posted
技术标签:
【中文标题】将控制台应用程序更改为 Windows 应用程序后 fopen 失败【英文标题】:fopen fails after changing console app to windows app 【发布时间】:2011-09-08 17:58:20 【问题描述】:我在带有 Visual Studio 的 Windows XP Professional 上使用 OpenCV 2.3.1 10(Ultimate),我无法打开级联文件。
相关代码如下:
String face_cascade_name = "haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
if( !face_cascade.load( face_cascade_name ) ) message(TEXT("--(!)Error loading face\n"));
我正在使用
GetCurrentDirectory()
函数,xml 文件包含在该目录中。
有趣的是,程序在我编译和运行时可以正常工作 Console 模式,但在运行时出现错误“加载面错误” Win32 模式(无控制台)。
感谢您的帮助!
【问题讨论】:
尝试从 sysinternals 运行 filemon 以查看访问您的 Windows 应用程序真正执行的文件。 我不确定,但我猜它是由 face_cascade.load() 内部调用的。也许它是其他一些功能。当我将它作为控制台应用程序运行时,我知道相同的代码可以工作。但是,当我将它放入 Windows 应用程序并从 WndProc 调用此代码时,它不再起作用了。 感谢 filemon 的建议。我安装了后继(进程监视器)文件名是乱码目录路径是正确的但最终的文件名是乱码。 这是乱码文件的样子:F:\My Documents\Visual Studio 2010\Projects\HelloWin\Debug\øB
正确的是:F:\My Documents\Visual Studio 2010\Projects\HelloWin\Debug\haarcascade_frontalface_alt.xml
在我将配置从“调试”更改为“发布”后,它开始工作。但是在“调试”配置中是否有这个问题?
【参考方案1】:
根据 OpenCV 文档,CascadeClassification 对象有一个带有以下原型的加载方法:
bool CascadeClassifier::load(const string& filename)
但是你给它喂了一个String
。从您的评论看来,它只是将指针值附加到目录字符串。尝试给它正确类型的参数。即:
string face_cascade_name("haarcascade_frontalface_alt.xml");
if( !face_cascade.load(face_cascade_name) ...
【讨论】:
以上是关于将控制台应用程序更改为 Windows 应用程序后 fopen 失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 Windows 窗体应用程序时如何将鼠标光标更改为自定义光标?
如何在设置Google Merchant帐户后将Android应用程序更改为付费?