社区
C++ Builder
帖子详情
如何从动态库DLL生成静态的LIB并使用???
CPerlAsm_Lx
2003-11-09 07:10:39
如何从动态库DLL生成静态的LIB并使用???
...全文
175
7
打赏
收藏
如何从动态库DLL生成静态的LIB并使用???
如何从动态库DLL生成静态的LIB并使用???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chifengwatch
2003-11-17
打赏
举报
回复
使用 $BCB path\Bin\implib.exe 生成 Lib 文件,加入到工程文件中
将该文件拷贝到当前目录,使用 implib MyDll.lib MyDll.dll 生成
swotcoder
2003-11-17
打赏
举报
回复
》bluedodo(笑三少)
你的方法是导出引入库
他需要的是静态库。
swotcoder
2003-11-17
打赏
举报
回复
用动态加载的方式可以搞定,只要有头文件即可。
bluedodo
2003-11-17
打赏
举报
回复
不知道楼主有没有VC,:)
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
这样就可以导出对应的LIB了,但你要用的话,要在工程中自己手工加上
Jinglihui
2003-11-17
打赏
举报
回复
支持一楼的兄弟
fatwave
2003-11-09
打赏
举报
回复
作者: Behard 阅读:1565 加入时间:2003-6-5 本文来自http://www.ccrun.com
--------------------------------------------------------------------------------
由于现在比较多的网友老是在 CSDN 上询问关于 BCB 编写 DLL 的问题,我编写了这篇文章抛砖引玉
一. 编写 DLL
File/New/Dll 生成 Dll 的向导,然后可以添加导出函数和导出类
导出函数:extern "C" __declspec(dllexport) ExportType FunctionName(Parameter)
导出类:class __declspec(dllexport) ExportType ClassName{...}
例子:(说明:只是生成了一个 DLL.dll )
#include "DllForm.h" // TDllFrm 定义
USERES("Dll.res");
USEFORM("DllForm.cpp", DllFrm);
class __declspec(dllexport) __stdcall MyDllClass { //导出类
public:
MyDllClass();
void CreateAForm();
TDllFrm* DllMyForm;
};
TDllFrm* DllMyForm2;
extern "C" __declspec(dllexport) __stdcall void CreateFromFunct();//导出函数
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return 1;
}
//---------------------------------------------------------------------------
MyDllClass::MyDllClass()
{
}
void MyDllClass::CreateAForm()
{
DllMyForm = new TDllFrm(Application);
DllMyForm->Show();
}
//---------------------------------------------------------------------------
void __stdcall CreateFromFunct()
{
DllMyForm2 = new TDllFrm(Application);
DllMyForm2->Show();
}
二. 静态调用 DLL
使用 $BCB path\Bin\implib.exe 生成 Lib 文件,加入到工程文件中
将该文件拷贝到当前目录,使用 implib MyDll.lib MyDll.dll 生成
// Unit1.h // TForm1 定义
#include "DllForm.h" // TDllFrm 定义
//---------------------------------------------------------------------------
__declspec(dllimport) class __stdcall MyDllClass {
public:
MyDllClass();
void CreateAForm();
TDllFrm* DllMyForm;
};
extern "C" __declspec(dllimport) __stdcall void CreateFromFunct();
class TForm1 : public TForm{...}
// Unit1.cpp // TForm1 实现
void __fastcall TForm1::Button1Click(TObject *Sender)
{ // 导出类实现,导出类只能使用静态方式调用
DllClass = new MyDllClass();
DllClass->CreateAForm();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ // 导出函数实现
CreateFromFunct();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete DllClass;
}
三. 动态调用 DLL
// Unit1.h
class TForm1 : public TForm
{
...
private: // User declarations
void (__stdcall *CreateFromFunct)();
...
}
// Unit1.cpp // TForm1
HINSTANCE DLLInst = NULL;
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if( NULL == DLLInst ) DLLInst = LoadLibrary("DLL.dll"); //上面的 Dll
if (DLLInst) {
CreateFromFunct = (void (__stdcall*)()) GetProcAddress(DLLInst,
"CreateFromFunct");
if (CreateFromFunct) CreateFromFunct();
else ShowMessage("Could not obtain function pointer");
}
else ShowMessage("Could not load DLL.dll");
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if ( DLLInst ) FreeLibrary (DLLInst);
}
rookieme
2003-11-09
打赏
举报
回复
1 用implib.exe 生成lib
2 在IDE界面的菜单Project/Add to Project 中将生成的lib加入工程
3 将要用的函数先申明,然后就可以直接用了
VC++
动态
链接
库
(
dll
)编程视频教学
动态
链接
库
的开发编译属于VC++程序员技能。 本课程学习之后能够理解
动态
链接
库
原理,学会编译
静态
库
、
动态
库
,学会通过
lib
和头文件链接
动态
库
,学会直接通过代码访问
dll
中函数
在 windows 上如何根据
dll
动态
库
生成
lib
文件?
例如,我这里有一个 test.
dll
动态
库
文件,我想要
生成
lib
链接
库
文件可以这样操作。 打开 Developer Command Prompt for VS 2022 开发工具命令行,用来设置运行变量。
使用
dumpbin.exe /EXPORTS test.
dll
> ...
静态
库
(
lib
)和
动态
库
(
dll
)的
使用
静态
库
(
lib
)和
动态
库
(
dll
)的理解与
使用
前言一、函数重载的理解二、extern “C” 的理解三、
静态
库
的调用1.
静态
库
的
生成
2.
静态
库
的调用四、
动态
库
的调用1.
动态
库
的
生成
2.
动态
库
的调用 前言 说明
静态
库
和...
库
文件、
静态
库
(
lib
)与
动态
库
(
dll
)的
生成
与
使用
静态
库
程序编译一般需经预处理、编译、汇编和链接几个步骤。在应用中,有一些公共代码是需要反复
使用
,就把这些代码编译为“
库
”文件;...
动态
库
又称
动态
链接
库
英文为
DLL
,是Dynamic Link
Lib
rary 的...
c++由
动态
库
dll
文件
生成
lib
文件的方法
但是很多
动态
库
dll
文件,并没有附带
lib
文件,因此就无法以
静态
加载的方式去
使用
。但是此问题也是有解决办法的,就是从
dll
文件去
生成
一个
lib
文件。 下面就介绍如何将
dll
文件去
生成
对应的
lib
文件
C++ Builder
13,826
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章