我试图在Qt上实现http://msdn.microsoft.com/en-us/library/dd377634%28v=VS.85%29.aspx ,为video文件生成一个海报帧/缩略图。
我已经安装了Windows Vista和Windows 7 SDK。 我放:
#include "qedit.h"
在我的代码(注意也有一个在C:\ QT \ 2010.04 \ mingw \ include),我添加:
win32:INCLUDEPATH += $$quote(C:/WindowsSDK/v6.0/Include)
到我的* .pro文件。 我编译并得到“错误:sal.h:没有这样的文件或目录”。 在VC ++中find这个我添加
win32:INCLUDEPATH += $$quote(C:/Program Files/Microsoft Visual Studio 10.0/VC/include)
现在有1400个编译错误。 所以,我放弃了,只是添加:
win32:LIBS + = C:/WindowsSDK/v7.1/Lib/strmiids.lib
到我的* .pro文件,并尝试运行(不包括任何标题):
IMediaDet mediadet;
但后来我得到“错误:IMediaDet:没有这样的文件或目录”。
#include "qedit.h"
给我同样的错误(它看起来像是指向Qt版本)和
#include "C:/WindowsSDK/v6.0/Include/qedit.h"
回到生成1000年的编译错误。
唉,这么多麻烦,应该是10行代码…
感谢您的意见和帮助
既然你说你是“一个C ++ / Qt新手”,那么我怀疑真正的问题可能是你试图自己加载库,而不是简单地将你的应用程序连接到它?
要使用Qt将外部库链接到您的应用程序中,您只需修改相应的.pro
文件即可。 例如,如果该库被称为libfoo.dll
您只需添加
LIBS += -L/path/to/lib -lfoo
你可以在qmake手册的相关部分找到更多关于这方面的信息。 请注意, qmake
通常使用类Unix的符号,并透明地在Windows上做正确的事情。
完成这个工作后,你可以包含库的头文件,并使用它提供的任何类和函数。 请注意,您也可以修改项目文件以附加一个包含路径来帮助获取标题,例如。
INCLUDEPATH += /path/to/headers
同样, 有关qmake手册相关部分的更多信息。
请注意,这两个项目变量与相对路径一起工作,并将愉快地使用..
来表示在所有平台上“上去一个目录”。
请注意,qedit.h需要dxtrans.h,它是DirectX9 SDK的一部分。
您可以从2006年8月起在DirectX SDK中找到dxtrans.h。 请注意,从新的DirectX SDK中删除了dxtrans.h。
你有访问外部图书馆的来源吗? 以下假定你这样做。
当我需要从一个只解决了函数的库中提取一个类时,我所做的就是在库中使用一个工厂函数。
// Library.h class SomeClass { 上市: SomeClass(std :: string name); // ...类声明在这里 };
在cpp文件中,当我的构造函数需要C ++参数(例如类型如std :: string)时,我使用extern“C”外的代理函数,这些参数作为指针传递,以防止编译器搞乱C和C ++。 如果构造函数不需要参数,则可以避免额外的步骤,并直接从导出的函数中调用新的SomeClass()。
// Library.cpp #include“Library.h” SomeClass :: SomeClass(std :: string name) { //实现细节 } //代理函数来处理C ++类型 SomeClass * ImplCreateClass(std :: string * name){return new SomeClass(* name); } 外部“C” { //注意C ++类型的传递指针 SomeClass * CreateClass(std :: string * name){return ImplCreateClass(name); } }
然后,在使用该库的应用程序中:
// Application.cpp #include“Library.h” typedef SomeClass *(* FactoryFunction)(std :: string *); // ... QLibrary库(QString(“MyLibrary”)); FactoryFunction factory = reinterpret_cast(library.resolve(“CreateClass”)); std :: string name(“foobar”); SomeClass * myInstance = factory(&name);
您现在拥有库中声明的类的实例。