将控制台应用程序更改为 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 失败的主要内容,如果未能解决你的问题,请参考以下文章

主视图控制器在点击项目并快速将方向从纵向更改为横向后消失

Uwp应用程序更改为蓝页。为什么?

使用 Windows 窗体应用程序时如何将鼠标光标更改为自定义光标?

如何在设置Google Merchant帐户后将Android应用程序更改为付费?

项目输出类型未更改为控制台应用程序,控制台窗口未在 WinForms 中显示

有没有办法使用python将Windows鼠标光标更改为自定义光标?