【问题标题】:native C++-DLL wrong data on visual studio 2010 and OpenCVVisual Studio 2010 和 OpenCV 上的原生 C++-DLL 错误数据
【发布时间】:2014-05-24 06:28:22
【问题描述】:

如果有人可以帮助我,我真的很感激。

我会详细说明情况。

我有两个项目的解决方案:

  1. 非托管 c++ 中的 win32 DLL 项目
  2. 用于测试 DLL 的控制台应用程序项目。

创建 dll 的项目 1 使用静态链接的 OpenCV 库。

它包含以下类:

class  CData_1D: public cv::Mat // (dllexport/dllimport depending on the project)
{
 unsigned m_length;

 CData_1D(unsigned cn)
 {
 m_length = cn;

 Mat(1, cn, DataType<double>::type);
 }
}

在项目 2 main() 函数中:

main()
{
CData_1D TestUnit(10);  
cout << TestUnit.m_length; // 1124007936

}

编译运行无异常,但数据完全错误 而 m_length 应该是 10,它总是 1124007936

为清楚起见,我省略了其余代码,请告诉我必须提供的详细信息。

感谢您的帮助

【问题讨论】:

  • opencv 库与“多线程 dll”运行时库链接。您的项目必须使用相同的。
  • 你的意思是我必须对两个项目都使用 /MD 吗?
  • 可能。是的。此外,从 cv::Mat 继承是一个糟糕的设计理念。而是将其分层。 (上面调用 Mat 构造函数的方式不会做正确的事情)
  • 我改变了你提到的设计,即 cv:mat 作为 CData_1D 中的对象。我还将两个项目都切换到/MD。问题还是一样。请另一个想法?

标签: c++ visual-studio-2010 opencv dll static-libraries


【解决方案1】:

"Native c++" 不存在,不同的编译器产生的代码与 APB 不兼容http://en.wikipedia.org/wiki/Application_binary_interface,这意味着您无法链接到它。

在我看来,这是 C++ 的主要主要问题。要解决此问题,请使用相同的编译器重新编译 OpenCV。

我不确定这是您的问题,但似乎很有可能。

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多