如何显式链接dll

srgzf 2011-03-30 03:52:24
我做了个dll,里面有个函数
int InitDll(PBYTE in_Y,PBYTE in_U,PBYTE in_V,int width,int height,int quality,int nStride)
{
return 100 ;
}

int fun(int i)
{
return i*i ;
}

制作好dll后,在应用程序中调用
PBYTE *in_Y = new PBYTE[0x420 * 0x1b0];
PBYTE *in_U = new PBYTE[0x420 * 0x1b0 / 4];
PBYTE *in_V = new PBYTE[0x420 * 0x1b0 / 4];
PBYTE *pData = new PBYTE[0x420 * 0x1b0];

m_hdll = ::LoadLibrary("test.dll");


typedef int (*PFUN)(int,int);//声明函数原型
typedef int (*InitDll)(PBYTE,PBYTE,PBYTE,int,int,int,int);//声明函数原型
PFUN newfun = (PFUN)::GetProcAddress(m_hdll,"add");//取得fun函数的地址
InitDll InitDll1 = (InitDll)::GetProcAddress(m_hdll,"InitDll");//取得InitDll函数的地址

int i = newfun(2,6);

int X=InitDll1(in_Y,in_U,in_V,100,100,100,100) ;


编译并调试
该语句编译出错 int X=InitDll1(in_Y,in_U,in_V,100,100,100,100) ;
如去掉该该语句,测 int i = newfun(2,6);运行正常,

那外该如何声明并应用呢



...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
srgzf 2011-03-30
  • 打赏
  • 举报
回复
谢谢各位兄弟,搞定了
King_hhuang 2011-03-30
  • 打赏
  • 举报
回复
InitDll(PBYTE in_Y,PBYTE in_U,PBYTE in_V,int width,int height,int quality,int nStride)
PBYTE *in_Y = new PBYTE[0x420 * 0x1b0];
你定义的是PBYTE,为啥你传个指针(PBYTE*)进去啊
guangyou 2011-03-30
  • 打赏
  • 举报
回复
如果你是在SDK编程(即win32控制台程序)下调用的话.
你的DLL程序声明函数应这样定义
extern "C" __declspec(dllexport) int InitDll(PBYTE in_Y,PBYTE in_U,PBYTE in_V,int width,int height,int quality,int nStride)
{
}
oyljerry 2011-03-30
  • 打赏
  • 举报
回复
函数申明等是否正确..

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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