怎么才能在VC中动态的加载链接库。
最好有具体的代码?
我通过GetProcAddress得到的函数指针总是空的是怎么回事?
最好有具体的代码?
我通过GetProcAddress得到的函数指针总是空的是怎么回事?
解决方案 »
- VC 画图问题,在同一个地方画两次矩形,结果图像消失
- 关于SetBitmapBits函数的用法,在线等
- 为什么我的文字颜色SetTextColor后不变化啊
- VC的游戏开发工资水平如何?
- 请教如何设置vc release时生成的obj文件放置的地方
- 急问:BHO组件中如何获取当前IE窗口的句柄
- 该怎样使用VARIANT类型
- 怎么响应CStatic的消息
- how to deal with WM_HELPINFO AND WM_HELPHITTEST?
- Two small questions about VC
- qiang a
- ADSI高手请进:调用IDsAdminCreateObj接口的lib库文件名是什么?
LoadLibrary
GetProcAddressFreeLibrary
//(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);
}
}
小改动如下:
//(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调用规范的
hin = ::LoadLibrary("mydll.dll");
typedef void(*myfunc)(void);
myfunc mf;
mf = (myfunc)::GetProcAddress(hin, "myfunc");
if(mf != (myfunc)NULL)
{
*myfunc();
}
::FreeLibrary(hin);
用了楼上几位方法测试同样得到函数指针为0