社区
C++ Builder
帖子详情
如何从动态库DLL生成静态的LIB并使用???
CPerlAsm_Lx
2003-11-09 07:10:39
如何从动态库DLL生成静态的LIB并使用???
...全文
226
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 将要用的函数先申明,然后就可以直接用了
VS下
生成
C程序
静态
库(
LIB
)及
动态库
(
DLL
)的方法
本文深入讲解
DLL
与
LIB
文件的区别,包括动态链接库与
静态
链接库的概念、VS下
生成
静态
库和
动态库
的方法、加载
lib
/头文件和
DLL
的步骤、查看
DLL
及
LIB
库导出函数的技巧。
库文件、
静态
库(
lib
)与
动态库
(
dll
)的
生成
与
使用
本文详细介绍了
静态
库和
动态库
的概念、
生成
方法及
使用
场景。对比了两者在链接时机、资源消耗和程序更新等方面的差异,并解释了.h、.
lib
和.
dll
文件之间的关系。
静态
库(
lib
)和
动态库
(
dll
)的
使用
本文介绍了Windows软件开发中
静态
库和
动态库
的相关知识。阐述了C和C++在函数重载上的差异,以及extern “C”的作用。详细说明了
静态
库和
动态库
的
生成
与调用方法,包括
静态
库的三种调用方式,
动态库
的隐式和显式调用,还提及了调用中可能出现的问题。
VS2019:C++程序
lib
静态
库、
dll
动态库
的
生成
和
使用
本文介绍了Windows环境下
静态
库和
动态库
的
生成
与
使用
方法。包括如何创建
静态
库和
动态库
项目,添加必要的文件,以及如何在其他项目中引入这些库进行调用。对比了两者在
生成
过程和
使用
方式上的不同。
C++中.
lib
静态
库、.
dll
动态库
的
生成
及调用<1>
本文详细介绍了C++中
静态
库.
lib
和
动态库
.
dll
的
生成
过程及其调用方法。
静态
库在编译时将代码加入到可执行文件中,适合不需要频繁更新的情况。
动态库
在运行时加载,节省内存,适用于多个程序共享。通过VS2015创建C++项目,分别演示了
静态
库的
生成
和调用步骤。
C++ Builder
13,871
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章