C语言封装dll
来源:互联网 发布:乐蜀网络 知乎 编辑:程序博客网 时间:2024/05/06 07:46
一、首先,使用vs2008创建windows32控制台程序,选择dll复选框,确定。
然后在stdafx.h头文件中声明导出函数,举例如下
__declspec(dllexport) int add(int a ,int b);//add是函数名,可声明多个
__declspec(dllexport) int sub(int a ,int b);
如果创建的是C++工程则需要在函数声明前加上extern "C"
变成: extern "C" __declspec(dllexport) int add(int a ,int b);
extern "C" __declspec(dllexport) int sub(int a ,int b);
接着在你创建的C文件中实现上述函数体,如下
int __declspec(dllexport) add(int a ,int b)
{
return a+b;
}
int __declspec(dllexport) sub(int a,int b)
{
return a-b;
}
这个是C++中,如果仅仅使用一个c文件实现dll,举例如下
#include <windows.h>
__declspec(dllexport) int add(int a ,int b);
__declspec(dllexport) int sub(int a ,int b);
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}//这段代码c++工程自动生成
__declspec(dllexport) int add(int a ,int b)
{
return a+b;
}
int __declspec(dllexport) sub(int a,int b)
{
return a-b;
}
二、C调用dll
在创建一个新的工程。把之前生成的dll文件拷贝入调用工程的debug文件夹下。如果想方便,就顺便把lib文件也拷贝到debug下,因为三要用。键入如下代码:
#include<stdio.h>
#include <windows.h>
int main()
{
typedef int (*ADD)(int ,int);//函数指针类型
HINSTANCE Hint = LoadLibrary("adddll.dll");//加载我们刚才生成的dll
ADD add = (ADD)GetProcAddress(Hint,"add");//取得dll导出的add方法
printf("%d",add(3,4));
return 0;
}
当提示错误error C2664: “LoadLibraryW”: 不能将参数 1 从“const char [13]”转换为“LPCWSTR” 时,需要步骤三。
三、C调用lib,
把上述工程生成的lib文件拷入建立的工程下,然后在代码中加入如下语句
#pragma comment(lib,"adddllcpp.lib")
extern int add(int ,int);//没有加这句而只加上面这句(或在工程设置里加上DLL.lib)会链接错误
extern int sub(int ,int);
注意:工程属性字符集必须改成“使用多字节字符集”。
0 0
- C语言封装dll
- C语言描述数据结构———封装DLL
- c++DLL封装DLL问题
- c#dll封装虚拟机
- c语言数据封装
- C语言实现封装
- C语言封装disruptor
- C语言实现封装
- C语言封装sqlite3_API
- c语言制作dll
- 【C++】多个类的DLL封装及调用
- 【C++】多个类的DLL封装及调用
- 【C++】多个类的DLL封装及调用
- 【C++】多个类的 DLL 封装及调用
- 【C++】多个类的DLL封装及调用
- 【C++】多个类的DLL封装及调用
- C#.NET 封装自定义组件(控件)Dll
- C#.NET 封装自定义组件(控件)Dll
- sql 子分类查询
- openwrt第一课 --- 下载与安装
- SQL LIKE 通配符随笔
- 算法导论学习笔记(时时更新)
- [JAVA]JAVA和C# 3DES加密解密
- C语言封装dll
- ios 上拉加载下拉刷新Dome
- WebView使用2
- 关于Ubuntu桌面系统su root时认证失败的问题
- Java 调用Web service 添加认证头(soapenv:Header)
- Web开发加入Log4j日志管理
- 海明码编码原理及其解释
- 数组的操作
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)