前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【编程基础】跟我学创建Windows动态库

【编程基础】跟我学创建Windows动态库

作者头像
程序员互动联盟
发布2018-03-13 11:59:24
5760
发布2018-03-13 11:59:24
举报

如何简单快速创建Win32平台下的动态链接库?但是有的创建出来用C/C++调用时没有问题,但是在其它编程语言调用时可能会出现问题,下面我们就按四个傻瓜式的步骤创建通用的windows动态库过程。

  • 创建空的win32的工程。
  • 添加C/C++头文件内容(MyHead.h):

#ifndef __MYHEAD_H__

#define __MYHEAD_H__

#ifndef MY_API

#define MY_API extern "C" __declspec(dllimport)

#endif

现在添加你想要放到Dll中的引出函数,我们这里用一个加和减的函数功能来举例。

MY_API int WINAPI MyAdd(int a, int b);

MY_API int WINAPI MySub(int a, int b);

#endif //__MYHEAD_H__

本质上,在外面使用这个头文件是不会定义MY_API,所以在外使用DLL时,文件夹内容实际上为:

extern "C" __declspec(dllimport)int __stdcall MyAdd(int a, int b);

extern "C" __declspec(dllimport)int __stdcall MySub(int a, int b);

  • 添加C/C++原文件内容:

#include <windows.h>

#define MY_API extern "C" __declspec(dllexport)

#include "MyHead.h"

MY_APIint WINAPI MyAdd(int a, int b)

{

return (a + b);

}

MY_APIint WINAPI MySub(int a, int b)

{

return (a - b);

}

注意:这里定义了MY_API。本质上,这里的函数声明为:

extern "C" __declspec(dllexport)int __stdcall MyAdd(int a, int b);

extern "C" __declspec(dllexport)int __stdcall MySub(int a, int b);

  • 增加def文件(Mydll.def):

;DLL导出文件,名字Mydll可以加引号

;by John

LIBRARY Mydll

EXPORTS

MyAdd @1

MySub @2

注意:

1, 在def文件中,函数名和@索引之间需要有空格、TAB等分隔符。

2, def文件需要在“配置”,“配置属性”,“连接器”,“输入”,“模块定义文件”制定,否则即使添加到工程也不会起作用。在VS2008等后来版本中,也不能用#pragma comment(linker, "/DEF:\"Mydll.def\"")来让def文件起作用。

这样用def文件生产的dll才能在VC以及VB等其他语言中使用。

C语言编程调用dll时,只要引入MyHead.h和对于的lib,并加入dll文件即可编译运行。

比如在VB中可以声明为:

Declare Function MyAdd Lib "Mydll.dll" (ByVala As Long, ByValb As Long) As Long

DeclareFunction MySub Lib "Mydll.dll" (ByVala As Long, ByValb As Long) As Long

通过这五步,就可以把生成的Lib文件和dll文件提供给windows平台下的其它编程时使用,怎么样,比较简单吧?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档