在VC中如何动态加载链接库/

一个傻冒 2003-12-09 07:09:20
怎么才能在VC中动态的加载链接库。
最好有具体的代码?
我通过GetProcAddress得到的函数指针总是空的是怎么回事?
...全文
168 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiechenghong 2003-12-10
  • 打赏
  • 举报
回复
我也碰到同样的问题,我专门做了一个TestDLL.dll测试,里面只有一个函数int add(int a,int b),不用def形式,用_declspec(dllexport)形式.
用了楼上几位方法测试同样得到函数指针为0
Scott_Zheng 2003-12-10
  • 打赏
  • 举报
回复
HINSTANCE hin;
hin = ::LoadLibrary("mydll.dll");
typedef void(*myfunc)(void);
myfunc mf;
mf = (myfunc)::GetProcAddress(hin, "myfunc");
if(mf != (myfunc)NULL)
{
*myfunc();
}
::FreeLibrary(hin);
checkyvc6 2003-12-10
  • 打赏
  • 举报
回复
楼上的步骤基本正确
小改动如下:
//(int a, int b) 表示定义的新函数参数,如空则()
//typedef int(SQRTPROC)(int a, int b); //定义类型 SQRTPROC 可以随意
注意函数调用是哪种类型_stdcall还是_cdecl
typedef int(_stdcall/_cdecl*SQRTPROC)(int a, int b); //定义类型 SQRTPROC 可以随意

HINSTANCE hInstance;
SQRTPROC* pFunction; //函数
//调试检查这里hInstance是不是空
hInstance=::LoadLibrary("test.dll");


if (hInstance)
{
//检查下面的名字是否正确(Min)
pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"Min");

if (pFunction)
{
int d=(*pFunction)(81,520);
CString sss;
sss.Format("Min Result is : %d",d);
MessageBox(sss);
}
}
如果以上都没有问题就是动态连接库self有问题你用vc自带的工具depends看看函数名是不是
c调用规范的

msvbvm60 2003-12-10
  • 打赏
  • 举报
回复
给你更详细的代码吧,记得给分:

//显式链接时不需要使用相应的Lib文件或头文件


//(int a, int b) 表示定义的新函数参数,如空则()
typedef int(SQRTPROC)(int a, int b); //定义类型 SQRTPROC 可以随意


HINSTANCE hInstance;
SQRTPROC* pFunction; //函数

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

if (hInstance)
{
pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"Min");

if (pFunction)
{
int d=(*pFunction)(81,520);
CString sss;
sss.Format("Min Result is : %d",d);
MessageBox(sss);
}
}
msvbvm60 2003-12-09
  • 打赏
  • 举报
回复

LoadLibrary
GetProcAddress

FreeLibrary
smch 2003-12-09
  • 打赏
  • 举报
回复
LoadLibrary
FreeLibrary

15,471

社区成员

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

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