社区
进程/线程/DLL
帖子详情
新手提问:只有头文件和.DLL文件,没有相应的.lib文件,能不能调用DLL中的函数啊?
liounzhou
2005-06-06 09:11:18
如题。如果能,请问该如何操作?
...全文
1160
4
打赏
收藏
新手提问:只有头文件和.DLL文件,没有相应的.lib文件,能不能调用DLL中的函数啊?
如题。如果能,请问该如何操作?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jerry
2005-06-06
打赏
举报
回复
1
有头文件就好办, 象楼上那样显式连接就不用 LIB 文件了, 另外, LIB 文件也可以手工创建,这样就可以隐含地连接到DLL了 :
Visual C++ 开发工具提供了两个命令行工具,一个是dumpbin.exe,另一个是lib.exe。利用这两个工具即可从dll导出其对应的lib。
1、在命令行执行:
dumpbin /exports yourdll.dll > yourdll.def
2、编辑 yourdll.def 文件,使之格式与.def文件格式一致。比如:
EXPORTS
fn1
fn2
3、在命令行执行:
lib /def:yourdll.def /machine:i386 /out:yourdll.lib
bobob
2005-06-06
打赏
举报
回复
楼上已经说的很清楚了
是可以的
Kudeet
2005-06-06
打赏
举报
回复
可以,用显式链接,它是应用程序在执行过程中随时可以加载DLL文件。使用显式链接应用程序编译时不需要使用相应的Lib文件。
看看下面的简单例子:
//MyDLL.h
extern "C" _declspec(dllexport) int Max(int a, int b);
extern "C" _declspec(dllexport) int Min(int a, int b);
显式链接:
#include "MyDLL.h"
void main(void)
{
typedef int(*pMax)(int a,int b);
typedef int(*pMin)(int a,int b);
HINSTANCE hDLL;
PMax Max
HDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件;
Max=(pMax)GetProcAddress(hDLL,"Max");
A=Max(5,8);
Printf("比较的结果为%d ",a);
FreeLibrary(hDLL);//卸载MyDll.dll文件;
}
bohut
2005-06-06
打赏
举报
回复
有静态和动态两种,静态的需要lib而动态的只需要一个dll就可以了(但是要知道函数的定义一般是头文件)动态相对复杂一点!但是掌握了也不是很难
//第一步 定义函数指针就是你要调用的函数,参数必须一致,不然就内存泄露
typedef HANDLE (PASCAL * OPEN)(char *,int);
//第二步 定义本地函数
//一般前两步都在头文件里面声明
OPEN open;
//第三步 加载dll
HMODULE m_hLib;
m_hLib ::LoadLibrary"E:\\yewufuwu\\TERMINALDLL\\Debug\\TerminalDLL.dll");
//输入相应的路径
if(m_hLib == NULL )
{
MessageBox("动态连接库没有找到!!!","LoadLibrary",MB_OK);
return ;
}
//第四步
else
{
MessageBox("动态连接库成功打开...","LoadLibrary",MB_OK);
open=(OPEN)GetProcAddress(m_hLib, "OpenDevice");
}
//第五步
long handle =open("EF",1);
动态库下的函数如下
//*************打开终端*****************************************
HANDLE __declspec(dllexport) WINAPI
OpenDevice(char * szType,int nType)
{
hReader=theTerminal.OpenReader(szType,0);
if(hReader==0)
return 0;
DWORD ThreadID=0;
return hReader;
}
z
lib
.h+zconf.h+z
lib
.
lib
+z
lib
1.
dll
z
lib
相关。使用方法见 http://blog.csdn.net/he11oworld/article/details/10491319
QT编写
DLL
调用
示例 方法 参数 返回值 事件回调
QT编写
DLL
给外部程序
调用
示例 方法 参数 返回值 事件回调 : 1:C#或者 NET 第一步:引入命名空间; using System Runtime InteropServices; 第二步:声明
函数
必须与实际
DLL
中
函数
名及参数一致; [
Dll
Import "qt
dll
dll
" ] public static extern int add int i ; 第三步:
调用
函数
执行; Console WriteLine add 10 ToString ; 2:QT 第一步:引入
头
文件
; #include <Q
Lib
rary> 第二步:定义
函数
指针 以备
调用
; typedef int Add int ; 第三步:载入
DLL
调用
函数
执行; Q
Lib
rary
lib
"qt
dll
dll
" ;
lib
load ; Add add Add
lib
resolve "add" ; add 50 ; 3:C或C++ 第一步:引入
头
文件
; #include <windows h> 第二步:定义
函数
指针; typedef int Add int ; 第三步:载入
DLL
调用
函数
执行; HINSTANCE h
Dll
Load
Lib
rary "qt
dll
dll
" ; 载入
DLL
获取句柄 if h
Dll
NULL { Add add Add GetProcAddress h
Dll
"add" ; 获取
函数
地址 printf "%d" add 110 ; Free
Lib
rary h
Dll
; 释放
DLL
}">QT编写
DLL
给外部程序
调用
示例 方法 参数 返回值 事件回调 : 1:C#或者 NET 第一步:引入命名空间; using System Runtime InteropServices; 第二步:声明
函数
必须与实际
DLL
中
函数
名及参数一致; [
Dll
Import "qt
dll
dll
" ] public static extern int add in [更多]
openGL超级全的库,有GL.h、GLAUX.h/
lib
、GLU.h/
dll
等等十多个
文件
,超级全
openGL超级全的库,有GL.h、GLAUX.h/
lib
、GLU.h/
dll
等等十多个
文件
,超级全。你想要的openGL的库都在这里,
没有
你找我
C++ .h(
头
文件
) .
lib
(库
文件
) .
dll
(动态链接库
文件
) 之间的关系和作用的区分
.h
头
文件
是编译时必须的,
lib
是链接时需要的,
dll
是运行时需要的。 附加依赖项的是.
lib
不是.
dll
,若生成了
DLL
,则肯定也生成
LIB
文件
。如果要完成源代码的编译和链接,有
头
文件
和
lib
就够了。如果也使动态连接的程序运行起来,有
dll
就够了(放在Debug
文件
夹里)。在开发和调试阶段,当然最好都有。 .h .
lib
.
dll
三者的关系是: H
文件
作用是:声明
函数
接口
DLL
文件
作用是:
函数
可执行代码 当我们在自己的程序
中
引用了一个H
文件
里的
函数
,编链器怎么知道该
调用
哪个
DLL
文件
呢?这就是
LIB
QT
中
引入海康威视SDK开发包(原理讲解:
头
文件
(.c)、库
文件
(.
lib
.
dll
))
原理简介:
头
文件
(.h)、源
文件
(.c)、库
文件
(.
lib
.
dll
) 1.
头
文件
(,h):声明
函数
接口,一些
函数
方法名 2.源
文件
(.c):对
头
文件
中
函数
的实现源代码 3..
lib
库
文件
有两种: (1)静态链接库(静态库):把程序
中
调用
的某
函数
的相关模块链接在一起,然后放入内存进行执行。 (2)动态链接库(导入库):把
调用
的
函数
所在
文件
模块(
DLL
)和
调用
函数
在
文件
中
的位置等信息链接进目标程序,程序运行时再从
DLL
中
寻找
相应
函数
代码进行执行。 所以.
lib
库就是导入.
dll
文件
用的。 4. .
dll
库
文件
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章