创建win32 dll
来源:互联网 发布:淘宝网踩踏式垃圾桶 编辑:程序博客网 时间:2024/06/05 00:58
Visual C++6.0 中可实现的DLL
Visual C++6.0 支持自动生成Win32 DLL和MFC AppWizard DLL两种,其中Win32 DLL不使用MFC类库,其导出的函数是标准的C接口,能够被非MFC和MFC的应用程序调用,应用范围更广泛。所以下面就介绍Win32 DLL的开发。
创建导出函数的Win32 DLL
1、启动Visual C++6.0,利用AppWizard创建一个“Win32 Dynamic-Link Library”类型的工程,工程名为SayHello。采用默认设置,即创建一个Win32 DLL的空项目。
2、为DLL工程添加头文件SayHello.h和源文件SayHello.cpp。在头文件SayHello.h中,声明DLL的导出函数Say和Sum,分别用来显示"Hello,World!"和求和。声明代码如下:
//
/*
extern "C"修饰词的作用是使C++编译器以C语言的方式对这个函数进行处理,以便供其他语言所用。
*/
extern "C" void _declspec(dllexport)Say(char* szWords,int nLen); //声明Say导出函数
extern "C" float _declspec(dllexport)Sum(float fNum1,float fNum2); //声明Sum导出函数
在源文件SayHello.cpp中添加函数Say和Sum的实现代码,代码如下:
//
#include <string.h>
#include "SayHello.h"
void Say(char* szWords,int nLen)
{
strcpy(szWords,"Hello,World!");
strcat(szWords,"\0");
}
float Sum(float fNum1,float fNum2)
{
return fNum1+fNum2;
}
3、【F7】键编译生成DLL。此时在工程的Debug文件夹下生成实际代码文件SayHello.dll和导入库文件SayHello.lib。
4、从DLL中导出函数有两种方法,一种是使用_declspec(dllexport)关键字,如SayHello.h中所示;一种是添加.def文件(值得注意的是,添加的文件类型是文本文件,且名称应输入SayHello.def),代码如下:
;
LIBRARY "SayHello"
DESCRIPTION "导出DLL中的函数"
EXPORTS
Say @1
Sum @2
5、加载DLL分为静态加载和动态加载。动态加载(运行时动态链接,也叫显示链接)DLL是通过LoadLibrary、GetProcAddress和FreeLibrary这3个API函数进行的。调用如下:
SAY Say;
typedef float(*SUM)(float,float);
SUM Sum;
HINSTANCE hdll;
hdll=LoadLibrary("..\\..\\SayHello\\Debug\\SayHello.dll");
if(hdll!=NULL)
{
//GetProcAddress函数获得获得获得DLL导出函数地址
Say=(SAY)GetProcAddress(hdll,"Say");
Sum=(SUM)GetProcAddress(hdll,"Sum");
}
else
{
AfxMessageBox("无法加载DLL!");
return;
}
UpdateData(TRUE);
const int Len=20;
char p[Len];
Say(p,Len);
m_strDispHello.Format("%s",p);
//m_cedit1.SetWindowTextA(m_strDispHello);
m_strDispHello.Format("%f",m_fResult);
m_cedit2.SetWindowTextA(m_strDispHello);*/
//GetDlgItem(IDC_EDIT2)->SetWindowText(m_strDispHello);
//UpdateData(FALSE);
FreeLibrary(hdll);
UpdateData(FALSE);
FreeLibrary(hdll);
extern "C" _declspec(dllimport) void Say(char* szWords,int nLen); //编译生成更高效的代码
extern "C" _declspec(dllimport) float Sum(float fNum1,float fNum2);
- Win32 DLL创建
- 创建win32 dll
- 创建win32 dll
- 创建并调用Win32 DLL
- Win32 DLL中创建对话框
- 创建Win32 DLL的步骤和使用
- VS2005创建win32 dll的项目向导
- VS2005创建win32 dll的项目向导
- VS2008创建WIN32 C的DLL
- VS2005创建win32 dll的项目向导
- win32 的DLL中创建windows窗口
- C++创建win32 DLL图解 (VS2010)
- VS2012创建动态库DLL(Win32)
- Win32 dll 的简单创建与使用
- MFC win32 Dll的创建和使用
- Win32 DLL
- Win32 Dll
- 用VC创建不导入任何DLL的WIN32程序
- 为网上流行论点“UIAutomator不能通过中文文本查找控件”正名
- imp,exp导入导出
- Linux下安装MySQL
- php中的设计模式之--抽象工厂模式
- AppiumDriver升级到2.0.0版本引发的问题--Cannot instantiate the type AppiumDriver
- 创建win32 dll
- 传统电视的逐渐死亡,有了惊人的带宽
- android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别。
- rabbitmq(6)
- 基于MapServer的在线地图实现
- 开发平台资源合辑
- android权限大全
- 数学之美番外篇:平凡而又神奇的贝叶斯方法
- Appium和UIAutomator英文和数字输入问题记录