多谢tingxx,还有thetwo.
tingxx我去你的主页看了,对我非常有帮助。都是要调用外部.dll 来实现附加功能。
我的是ffmpeg的动态库,你的是avicap.dll。 我现在遇到的问题是,不能正确resolve动态库里的函数。
按照你的例子”使用QLibrary来调动DLL“。
我是着调用ffmpeg的动态库。
第一步查看是否能成功load动态库:
环境: WindowsXp, Visual Stadio 2005, Qt4.3.4 (open source)
ffmpeg 库文件: include {*.h 文件}
Libs {avcodec.dll, avformat.dll, avuitl.dll, avcodec.lib, avformat.lib,avuitl.lib }
ffmpeg 下载地址 avcodec.dll, avformat.dll, avuitl.dll 和 qtcn.cpp都放在同一个文件夹下。
(avcodec.lib, avformat.lib,avuitl.lib)应该用不到吧?
qtcn.cpp : - #include <QApplication>
- #include <QLabel>
- #include <QLibrary>
- int main (int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QLibrary myLib("avcodec");
- if(myLib.load())
- {
- QLabel *label = new QLabel("Hello Qt");
- label->show();
- }
- return app.exec();
-
- }
qtcn.cpp :可以正常编译,并运行处结果“Hello Qt”,load成功.
另: 如果只把 avcodec.dll和 qtcn.cpp都放在同一个文件夹下,编译成功,但不能成功运行出结果“Hello Qt”.
把
qtcn.cpp : 做修改为
qt.cpp :, 用来查看是否能调用 avcodec.dll 里边的函数(void
av_free(void *ptr))
- #include <QApplication>
- #include <QLabel>
- #include <QLibrary>
- int main (int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QLibrary myLib("avcodec");
- typedef void (*MyPrototype)(void *ptr);
- MyPrototype myFunction = (MyPrototype) myLib.resolve("av_free");
- if (myFunction)
- {
- QLabel *label = new QLabel("Hello Qt");
- label->show();
-
- }
- return app.exec();
-
- }
qt.cpp : 编译无错误,但是运行不出去结果“Hello Qt”,我想函数:av_free没有能成功resolve。
问: 怎么才能正确的调用ffmpeg动态库里的函数,从而能做个媒体播放器。
另: QLibrary myLib("avcodec"); //因为我不清楚av_free是否一定是avcodec.dll里的函数
所以我用avformat.dll, avuitl.dll分别试了,结果和avcodec.dll一样。
初学者,希望大家多帮助,谢谢。