VC中如何调用libavcodec.dll,和libacformat.dll?

a1111111984 2009-03-13 10:16:30
这些天研究ffmpeg的解码部分,感觉不知从何入手,甚是郁闷故请教于各位大侠,望各位不吝赐教!

我现在已经将ffmpeg的工程在minsys+mingw 下编译通过了,但不知道在window下如何使用DLL文件,最好有调用的例子。

谢谢
...全文
344 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
a1111111984 2009-03-17
  • 打赏
  • 举报
回复
楼上说的好,我似乎有点明白了。呵呵
a1111111984 2009-03-16
  • 打赏
  • 举报
回复
自己顶
TianChong 2009-03-16
  • 打赏
  • 举报
回复
楼主还没看明白啊?
这样吧,我也细说一遍:
你有多个接口函数要调用的话,就要写多个下面这东东,用于定义函数指针的:
typedef int (__cdecl *MYPROC_001)(LPWSTR); //注意是根据你要调用的函数定义类型来写的
typedef int (__cdecl *MYPROC_002)(LPWSTR);
......
typedef int (__cdecl *MYPROC_999)(LPWSTR); //共999个够用了吧?


然后是装入目录下的DLL并得到DLL中对应的函数指针,赋给你的函数指针变量
HINSTANCE hinstLib; //指向你的DLL
MYPROC_001 ProcAdd001; //这个MYPROC_001之类的东西就是你上面typedef的
MYPROC_002 ProcAdd002;
......
MYPROC_009 ProcAdd999;

BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
hinstLib = LoadLibrary(TEXT("你的DLL文件名"));
if (hinstLib != NULL) //如果成功装载才继续
{
ProcAdd001 = (MYPROC_001) GetProcAddress(hinstLib, "你的函数名fn1");
//此时ProcAdd001已指向你上面那个DLL中的fn1函数了.
//如果要再调用第999号函数,fn999,你就这么做:
ProcAdd999 = (MYPROC_999) GetProcAddress(hinstLib, "你的函数名fn999");

//这时你也只是得到指向DLL中fn1和fn999函数的指针而已,要运行那个函数(即调用这个函数),还要进行下一步
if (NULL != ProcAdd001) //如果ProcAdd001确定指向了某处(这个地方当然是你的DLL中的fn1函数了)
{
(ProcAdd001) (L"调用了fn1\n"); //<====这里就是调用
//如果需要,继续调用第fn999函数,因为这个函数由ProcAdd999指向,所以,要换成ProcAdd999在前面了:
(ProcAdd999) (L"调用了fn999\n"); //<====这里就是调用
}
//所有函数使用完毕后,要将DLL释放:
fFreeResult = FreeLibrary(hinstLib); //因为hinstLib是指向你的DLL的,所以释放他就是释放你的DLL
}

这下楼主应该很明白了吧? 如果还是不明白,我强烈建议楼主下载一本电子书<<WINDOWS核心编程>>,DLL一章讲得很详尽,我也有这本书,如果网上找不到可以加我的QQ:30101,我给你发.
siyiwuzhi 2009-03-16
  • 打赏
  • 举报
回复
编译好动态库,把dll放到你的工程路径等,然后LoadLibrary加载dll,GetProcAddress获得函数地址,然后赋值给函数指针,调用... FreeLibrary释放DLL

for example:

HINSTANCE hLib=LoadLibrary("dllname");
if (hLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hLib, "myPuts");

if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (L"Message sent to the DLL function\n"); // <====这里就是调用
}
//如果需要调用其他的接口函数,重复上述的 GetProcAddress 及调用过程即可

FreeLibrary(hLib);
}
oyljerry 2009-03-13
  • 打赏
  • 举报
回复
编译好动态库,把dll放到你的工程路径等,然后LoadLibrary加载dll,GetProcAddress获得函数地址,然后赋值给函数指针,调用... FreeLibrary释放DLL
  • 打赏
  • 举报
回复
// A simple program that uses LoadLibrary and 
// GetProcAddress to access myPuts from Myputs.dll.

#include <windows.h>
#include <stdio.h>

typedef int (__cdecl *MYPROC)(LPWSTR);

VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

// Get a handle to the DLL module.

hinstLib = LoadLibrary(TEXT("myputs"));

// If the handle is valid, try to get the function address.

if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");

// If the function address is valid, call the function.

if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (L"Message sent to the DLL function\n"); //<====这里就是调用
}

// Free the DLL module.

fFreeResult = FreeLibrary(hinstLib);
}

// If unable to call the DLL function, use an alternative.

if (! fRunTimeLinkSuccess)
printf("Message printed from executable\n");
}
warsour 2009-03-13
  • 打赏
  • 举报
回复
学习就直接用别人的SDK3.2吧,里面有库文件,自己编译的时候加上一句话和VC关联起来也能得到库文件的,至于是啥偶就忘啦,不过网上有很多介绍的,直接调用Dll是个办法,就是感觉太麻烦了
NineheadedBird 2009-03-13
  • 打赏
  • 举报
回复
直接看DLL有几个export函数 重复上面工作即可
jixingzhong 2009-03-13
  • 打赏
  • 举报
回复
HINSTANCE hLib=LoadLibrary("dllname");
if (hLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hLib, "myPuts");

if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (L"Message sent to the DLL function\n"); //<====这里就是调用
}
//如果需要调用其他的接口函数,重复上述的 GetProcAddress 及调用过程即可

FreeLibrary(hLib);
}
a1111111984 2009-03-13
  • 打赏
  • 举报
回复
可否说的明白些,多谢
  • 打赏
  • 举报
回复
FFMPEG 中有几个代码:如 FFMpeg.c,FFPlay.c等
a1111111984 2009-03-13
  • 打赏
  • 举报
回复
如果有许多个接口函数怎么操作?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧