导航:首页 > 文件管理 > 如何封装dll文件

如何封装dll文件

发布时间:2023-04-10 15:32:36

『壹』 如何将图片封装成.dll文件及调用~!

VB
代码
最简单的方法:
创建
ActiveX
Dll
然后里面添加个窗体Form1,窗体上添加图片框
Image1
如果多图
用个Imagelist
类模块
内写个公共调用函数
多图片的根据ID获取对应的图片就是了。这里就添加一个
Image1
然后为Image1选择个图片
dll
的类模块
Class1
中写如下代码
Public
Function
GetYouPic()
As
StdPicture
Set
GetYouPic
=
Form1.Image1.Picture
End
Function
Dll
就这么好了
嘎嘎

编译生成Dll
(MyDll测试生成的Dll名字)
调用:
创建个exe工程文件
然后菜单中
工程\引用刚才的dll
-MyDll.dll
然后在exe工程中添加个Image1
显示Dll中图片的代码
Private
Sub
Form_Load()
'窗体加载代码写
这个就可以显示啦
Dim
XX
As
New
MyTestDll.Class1
Image1.Picture
=
XX.GetYouPic
End
Sub
'***********************
Over

『贰』 c# 如何将方法封装成dll类库

a.打开visualstudio-文件-新建-项目-类库-名称MyTestDll;

b.右键Class1.cs-修改为TestDll.cs;

c.在让备里面写一个自己想操作的函数;

d.保存-生成解决方案;

e.这是你的Debug文件夹下就会有一个MyTestDll.dll文件,你就可以把它放在你想引用的工程。

『叁』 如何将多个dll封装到一个dll中

mbox2w.exe或者是其它相似的工具可能对你更有用,你试试。
它可以封装DLL,也可封装多个DLL和EXE成为一个独立程序

『肆』 如何封装一个dll文件

在你的项目上,右键,选择属性凯谈,在通用属性中把生成类型,选择成,并蠢类库。
然后重新生成,这样在你的项目目录 bin文件夹下就盯蔽碰会产生一个.dll文件。

『伍』 VC++ 程序 如何封装为dll文件

创建新的动态链接库 (DLL) 项目

从 “文件”菜单中,选择 “新建”,然后选择 “项目…”。

在 “项目类型”窗格中,选择 “Visual C++”下的 “Win32”。

在 “模板”窗格中,选择 “Win32 控制台应用程序”。

为项目选择一个名称,如
MathFuncsDll,并将其键入 “名称”字段。 为解决方案选择一个名称,如
DynamicLibrary,并将其键入 “解决方案名称”字段。

单击 “确定”启动 Win32 应用程序向导。
在 “Win32 应用程序向导”对话框的 “概述”页中,单击 “下一步”。

在 “Win32 应用程序向导”中的 “应用程序设置”页中,选择 “应用程序类型”下的 “DLL”(如果可用),或者选择 “控制台应用程序”(如果 “DLL”不可用)。 某些版本的 Visual Studio
不支持通过使用向导创建 DLL 项目。您可以稍后对此进行更改,以将项目编译为
DLL。

在 “Win32 应用程序向导”的 “应用程序设置”页中,选择 “附加选项”下的 “空项目”。

单击 “完成”创建项目。

向动态链接库添加类

若要为新类创建头文件,请从 “项目”菜单中选择 “添加新项…”。
将显示 “添加新项”对话框。
在 “类别”窗格中,选择 “Visual C++”下的 “代码”。 在 “模板”窗格中选择 “头文件(.h)”。 为头文件选择一个名称,如
MathFuncsDll.h,并单击 “添加”。 将显示一个空白文件。

添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。代码应与以下内容类似:

以带有颜色区分的格式查看复制到剪贴板打印

// MathFuncsDll.h

namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);

// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);

// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}

// MathFuncsDll.h

namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);

// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);

// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}

请注意此代码方法声明中的 __declspec(dllexport) 修饰符。 这些修饰符使 DLL
能够导出该方法以供其他应用程序使用。有关更多信息,请参见 dllexport, dllimport。

若要为新类创建源文件,请从 “项目”菜单中选择 “添加新项…”。
将显示 “添加新项”对话框。
在 “类别”窗格中,选择 “Visual C++”下的 “代码”。 在 “模板”窗格中,选择 “C++ 文件(.cpp)”。 为源文件选择一个名称,如
MathFuncsDll.cpp,并单击 “添加”。 将显示一个空白文件。

在源文件中实现“MyMathFuncs”的功能。代码应与以下内容类似:

以带有颜色区分的格式查看复制到剪贴板打印

// MathFuncsDll.cpp
// compile with: /EHsc /LD

#include "MathFuncsDll.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}

double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}

double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}

return a / b;
}
}

// MathFuncsDll.cpp
// compile with: /EHsc /LD

#include "MathFuncsDll.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}

double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}

double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}

return a / b;
}
}

若要将项目生成为 DLL,请从
“项目”菜单中选择
MathFuncsDll “属性...”。 在左窗格中,选择 “配置属性”下的 “常规”。
在右窗格中,将 “配置类型”更改为 “动态库(.dll)”。
单击 “确定”保存更改。

说明

如果您从命令行生成项目,请使用
/LD 编译器选项指定输出文件应为 DLL。
有关更多信息,请参见 /MD、/MT、/LD(使用运行库)。

编译该动态链接库,方法是选择
“生成”菜单中的 “生成解决方案”。
这样就创建了一个可供其他程序使用的
DLL。

『陆』 如何封装c++程序成dll文件

C++编写DLL的方法

在写C++程序时,时常需要将一个class写成DLL,供客户端程序调用。这样的DLL可以导出整个class,也可以导出这个class的某个方法。

一、导出整个class

方法很简单,只需要在类的头文件中class和类名之间加上_declspec(dllexport),同时在另外一份提供给客户端调用程序使用的类的头文件中class和类名之间加上_declspec(dllimport)。为了能让客户端程序和DLL程序公用该类的一份头文件,通常在类的头文件中使用宏和预编译指令来处理。如下DLLTest.h:

#ifdef DLL_TEST_API

#else

#define
DLL_TEST_API _declspec(dllimport)
#endif

Class DLL_TEST_API CDLLTest
{

Public:
CDLLTest();

~CDLLTest();

int Add(
int
a, int
b);

};
DLLTest.cpp如下:

#define
DLL_TEST_API _declspec(dllexport)

#include “DLLTest.h”

………………………………………
这样,在DLL编译时DLL_TEST_API被定义为_declspec(dllexport),而且客户端程序编译时它被定义为_declspec(dllimport)。

二、导出这个类的某个或者某几个方法。

这时,需要将_declspec(dllexport)放到成员函数名前,如DLLTest.h:

#ifdef DLL_TEST_API

#else

#define
DLL_TEST_API _declspec(dllimport)
#endif

Class CDLLTest
{

Public:
CDLLTest();

~CDLLTest();
int DLL_TEST_API Add(
int
a, int
b);

};

但是,如果仅仅是这样的话,当客户端程序#include这个头文件后,定义DLLTest这个类的一个对象后(静态方式链接DLL),客户端程序无法链接通过,会提示构造函数和析构函数无法解析,此时,需要将构造函数和析构函数前也加上DLL_TEST_API宏即可。

当然这里还有个问题就是类的函数在导出后,名字会发生变化,我们可以在函数名前再加上extern “C” ,如 extern “C” DLL_TEST_API int Add(int a ,int b);但这只解决了C与C++调用时名字变更问题,可靠的方法还是增加一个模块定义文件def,在该文件中定义导出函数的名称,我们将在后面看到样例。

DLL编写完成后,就只剩下客户端程序如何去调用该DLL了,静态方式调用DLL和动态方式调用DLL。

一、静态方式调用DLL

这个方法就简单了,将DLLTest.h头文件和DLLTest.lib,DLLTest.dll文件拷贝到客户端程序的当前目录下,在客户端程序中#include<DLLTest.h>,然后通过#pragma comment(lib,”DLLTest.lib”)的方式引入lib库,或者在客户端程序的工程属性里面增加对该lib文件的引入。

然后就可以在客户端程序中如同使用本地的一个class一样使用该DLL了,如:

CDLLTest dllTest;

dllTest.Add(
1
,2
);

二、动态方式调用DLL

动态调用这个DLL,就需要对这个class进行修改了。

首先,在DLLTest.cpp文件中增加一个全局函数,该函数可以返回这个class的一个实例,这样,客户端程序调用这个全局函数后,得到该class的实例,就可以调用该class的实例方法了。

extern
“C” _declspec(dllexport) CDLLTest* GetInstance()
{

return
new
CDLLTest;
}
注:extern “C” 只是解决了c与c++编译器之间的兼容问题,如果需要和其他编译器之间兼容,可靠的办法还是增加一个.def文件,文件内容如下:

LIBRARY “DLLTest”

EXPORTS

GetInstance
= GetInstance
这样就指定了DLL的函数导出后的名称仍然不变。

这样,客户端程序就可以通过该函数来获取class的一个实例了。如下:

先需要定义一个函数指针类型:

typedef CDllTestBase* (*pfGetInst)();

//
注:CDllTestBase类后面会介绍。

HMOUDLE hMod
= LoadLibrary( _T(“DLLTest.DLL”) );

if(hMod)
{
pfGetInst pfGetInstance
= (pfGetInst)GetProcAddress(“GetInstance”);
if( p )
{

//
通过基类指针指向派生类对象

CDllTestBase * pInst = pfGetInstance ();
if( NULL
!= pInst )
{
pInst
->Add( 1
,2
);
}

if( NULL
!= pInst )
{

//
释放对象

delete pInst;
}
}
}
当然,这里还是需要include这个DLL的头文件DLLTestBase.h,如果将之前所写的头文件DLLTest.h直接拷贝到客户端程序的当前目录下,并include进来的话,在编译连接时,是无法通过的,我们需要对这个头文件进行修改,首先增加一个.h 文件DLLTestBase.h,在这个文件中我们将需要在客户端程序中调用的函数都命名成纯虚函数,然后让CDLLTest类继承自CDLLTestBase类,DLLTestBase.h如下:

Class CDLLTestBase
{
Public:
Virtual
~CDLLTestBase(){};//
虚析构函数,且为内联函数

Virtual int
Add(int
a, int
b) = 0
;

}
DLLTest.h修改后如下:

#include “DLLTestBase.h”
Class CDLLTest :
public
CDLLTestBase
{
Public:
CDLLTest();

~CDLLTest();

int
Add(int
a, int
b);
};
注:这里的DLLTestBase需要提供一个虚析构函数,这样在客户端程序中就可以通过基类指针来释放派生类对象了。

这样,只需要将DLLTestBase.h拷贝到客户端程序的当前目录下,然后在客户端程序中#include”DLLTestBase.h”,就可以如上面介绍一样在客户端程序中调用DLL里面的方法了。

阅读全文

与如何封装dll文件相关的资料

热点内容
哪个app可以分辨航母 浏览:537
哪个app是英英词典 浏览:23
javavoid参数 浏览:829
如何让编程具有记忆功能 浏览:435
javamail发送带附件的邮件 浏览:173
微信分享文件到其他软件 浏览:682
微信对话文件夹在哪 浏览:287
qq头像欧美范街头男生 浏览:321
毛孔app 浏览:880
照片级渲染教程 浏览:304
目录中的文件夹有什么用 浏览:177
车载u盘文件扫描 浏览:410
稻壳文档怎样改文件名 浏览:620
cad怎么把文件存成模板 浏览:250
编程设计用什么笔记本流畅 浏览:584
电脑突然打开文件很慢 浏览:501
数据线一般是多少瓦的 浏览:314
javawebjsp简单项目实例 浏览:930
u盘lost文件夹删除不了 浏览:754
工具使用如何帮助提升工作效率 浏览:773

友情链接