想看看lib,dll,所以搜索了一些帖子看了看,关于一些问题还不是很明白。
我提出来,希望大家看看,我相信对初学的朋友是有好处的。
(不说明就是在vc++6中)1 怎么制造 lib 文件? File->New...->Projects->Win32 Static Library
填Project name..
有一个复选框,随便你填不填。
然后加一个 class,build,看看你的文件夹里多了什么?
是一个 *.lib文件,大公告成。2 怎么使用 lib文件?
需要头文件和lib文件。
举例:a.h,a.lib
在使用lib的 project里面。
//新建一个 a.h, copy your a.h file to a.h
//a.cpp
#pragma comment(lib, "a.lib") //连接 a 库
3 怎么制造 dll?
File->New...->Projects-> 你有两种选择 1 MFC AppWizard(dll)
2 Win32 Dynamic_Link Library 然后 build,找一下,现在应该有了 a.dll ,还有 a.lib. 如果你要使用 a.dll,最好别忘了还得做点别的。
一个 *.def 文件(文件怎么做,请搜索一下这个论坛,比较容易,如果有人回贴说不
会,我会加上来的)。4 怎么使用 dll?
问题来了,我也不是很清楚,我知道的一种是这样的。 在使用的时候 ::LoadLibrary()
算了,还是让大家看看实例,是 MSDN 中的。
使用应该是比较简单的,但也许实际情况并不是很简单。学习中......#include <stdio.h>
#include <windows.h>
typedef VOID (*MYPROC)(LPTSTR);
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibrary("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 (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("message via alternative method\n");
}
我的问题:
愿意解答的朋友随便说说。1 如果我没有头文件的话,也没有函数的参数形式,那么我是调用不了dll的。
也就是说,需要头文件,这个我可以理解,但我在搜索的帖子中,怎么一些人说不需要
头文件调用dll呢?
怎么调用?
2 隐式和显示我还不清楚。就这些吧。谢谢你进来。
我提出来,希望大家看看,我相信对初学的朋友是有好处的。
(不说明就是在vc++6中)1 怎么制造 lib 文件? File->New...->Projects->Win32 Static Library
填Project name..
有一个复选框,随便你填不填。
然后加一个 class,build,看看你的文件夹里多了什么?
是一个 *.lib文件,大公告成。2 怎么使用 lib文件?
需要头文件和lib文件。
举例:a.h,a.lib
在使用lib的 project里面。
//新建一个 a.h, copy your a.h file to a.h
//a.cpp
#pragma comment(lib, "a.lib") //连接 a 库
3 怎么制造 dll?
File->New...->Projects-> 你有两种选择 1 MFC AppWizard(dll)
2 Win32 Dynamic_Link Library 然后 build,找一下,现在应该有了 a.dll ,还有 a.lib. 如果你要使用 a.dll,最好别忘了还得做点别的。
一个 *.def 文件(文件怎么做,请搜索一下这个论坛,比较容易,如果有人回贴说不
会,我会加上来的)。4 怎么使用 dll?
问题来了,我也不是很清楚,我知道的一种是这样的。 在使用的时候 ::LoadLibrary()
算了,还是让大家看看实例,是 MSDN 中的。
使用应该是比较简单的,但也许实际情况并不是很简单。学习中......#include <stdio.h>
#include <windows.h>
typedef VOID (*MYPROC)(LPTSTR);
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibrary("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 (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("message via alternative method\n");
}
我的问题:
愿意解答的朋友随便说说。1 如果我没有头文件的话,也没有函数的参数形式,那么我是调用不了dll的。
也就是说,需要头文件,这个我可以理解,但我在搜索的帖子中,怎么一些人说不需要
头文件调用dll呢?
怎么调用?
2 隐式和显示我还不清楚。就这些吧。谢谢你进来。
解决方案 »
- CArray<CArray<double,double>,CArray<double,double>&> m_data;
- 一个简单的opencv画图
- 小弟在学习MFC的网络技术,哪位能推荐本书吗?
- 类ACDSee中对图象显示的放大,缩小,以及小手拖动实现方法
- 请问武大方略这家公司怎么样???如果是武大方略的员工,多送100分
- 请教怎么给普通按钮加上位图及修改按钮上的字体啊
- 哪个API可以设定、读出文件的摘要信息(主题,作者,标题等)?
- 怎样让我的窗口始终在最上面(stay in top),在线等待!
- 关于无符号数的减法
- bmp的显示
- VC++前辈请指点我
- 绝望中,非常奇怪的问题,有关socket!分不是问题!
加入lib和,h就是静态连接了
你怎么使用dll里面的函数呢?你可以得到函数的指针,但是,你怎么调用函数呢?
比如 int (* pFunc)(int);你现在知道了 函数的地址 pFunc = 0x10008080,那你怎么调用?
我就是这点不明白,前提是你没有 a.h
生成DLL时一般会同时生成一个LIB,不过此LIB和生成静态库时的LIB不一样。
只是用于项目连接。如果你要使用一个DLL,可以:LoadLibrary,然后取函数地址,调用。例如你所说的pFunc可以这样调用:pFunc(999)另外一种方法就是和用静态库类似,连接那个LIB库。运行时还需要DLL。你可以
看看VC向导生成的MFC项目,缺省情况就是动态连接MFC的。建议看看DSP文件的内容,不难。参考一下MSDN吧,一旦你弄明白了DSP文件,
项目设置就不会再困扰你了。
随dll生成的
还有静态库调用dll的时候,需要lib时候也需要h,也就是静态链接,也就是隐式;
不需要lib的时候,就是动态链接,LoadLibrary(),就是显式;
这里说的lib是随dll生成的……
1 “调用dll的时候,需要lib时候也需要h,也就是静态链接,也就是隐式;”
怎么使用?如果不使用 LoadLibrary(),是设置在编译的选项里面吗?2 “不需要lib的时候,就是动态链接,LoadLibrary(),就是显式;”
需要头文件吗?
2、不需要,只需要一个dll