动态链接库DLL导出函数并导入使用
动态链接库DLL导出函数并导入使用
本文完全参考自《vs2008制作dll笔记,回带值样例》。
首先制作DLL文件,在vs2010中新建Win32控制台项目,选择DLL选项,简历头文件,源文件如下:
头文件:
// MyDll.h
extern "C" _declspec(dllexport) int Max(int a, int b);
extern "C" _declspec(dllexport) int Min(int a, int b);
extern "C" _declspec(dllexport) bool cim2scada(char* cimId, char** scadaId);
源文件:
// MyDll.cpp : Defines the exported functions for the DLL application.
// #include "MyDll.h"
#include <iostream> int Max(int a, int b)
{
if (a >= b)
{
return a;
}
else
{
return b;
}
} int Min(int a, int b)
{
if (a >= b)
{
return b;
}
else
{
return a;
}
} bool cim2scada(char* cimId, char** scadaId)
{
char* result;
if (cimId == NULL)
{
printf("空指针!");
return false;
}
else if (strlen(cimId) == )
{
printf("cimId无值!");
return false;
} if (strcmp(cimId, "aaaaaa") == )
{
result = "";
}
else if (strcmp(cimId, "bbbbbb"))
{
result = "";
} *scadaId = result;
printf("fun scadaId: %s \n", *scadaId);
return true;
}
然后,创建测试样例,重新简历Win32控制台程序,选择控制台选项,建立测试代码:
#include "windows.h"
#include <iostream> int main()
{
typedef int (*pMax)(int a, int b);
typedef int (*pMin)(int a, int b);
typedef bool (*pcim2scada)(char* cimid, char** scada); HINSTANCE HDLL;
HDLL = LoadLibrary(L"MyDll.dll"); // 加载动态链接库MyDll.dll文件;
pMax Max = (pMax)GetProcAddress(HDLL, "Max");
pMin Min = (pMin)GetProcAddress(HDLL, "Min");
pcim2scada cim2scada = (pcim2scada)GetProcAddress(HDLL, "cim2scada"); int a = Max(, );
char* cimId = "aaaaaa";
char* scadaId = "";
bool b = cim2scada(cimId, &scadaId); printf("Max结果为%d\n", a);
printf("cimId:%s, scadaId:%s\n", cimId, scadaId); FreeLibrary(HDLL); // 卸载MyDll.dll文件
}
编译生成Debug文件夹,讲之前生成的Dll文件拷贝到该Debug文件夹中,然后运行该测试样例。
DLL导出并导入生成函数需要注意几点:
extern "C" _declspec(dllexport)
typedef int (*pMax)(int a, int b);
typedef int (*pMin)(int a, int b);
typedef bool (*pcim2scada)(char* cimid, char** scada);
HINSTANCE HDLL;
HDLL = LoadLibrary(L"MyDll.dll"); // 加载动态链接库MyDll.dll文件;
pMax Max = (pMax)GetProcAddress(HDLL, "Max");
pMin Min = (pMin)GetProcAddress(HDLL, "Min");
pcim2scada cim2scada = (pcim2scada)GetProcAddress(HDLL, "cim2scada");
接下来,将学习如何用DLL导出C++类、对象,并进行导入使用。
动态链接库DLL导出函数并导入使用的更多相关文章
- DLL导出函数和类的定义区别 __declspec(dllexport)
DLL导出函数和类的定义区别 __declspec(dllexport) 是有区别的, 请看 : //定义头文件的使用方,是导出还是导入 #if defined(_DLL_API) #ifndef D ...
- dll 导出函数名的那些事
dll 导出函数名的那些事 关键字: VC++ DLL 导出函数 经常使用VC6的Dependency或者是Depends工具查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导 ...
- C# 遍历DLL导出函数
C#如何去遍历一个由C++或E语言编写的本地DLL导出函数呢 不过在这里我建议对PE一无所知的人 你或许应先补补这方面的知识,我不知道为什么PE方面的 应用在C#中怎么这么少,我查阅过相关 C#的知识 ...
- dll导出函数的两种方式的比较
最初的网页链接已经挂了, 在此贴一个中间的转载链接 https://blog.csdn.net/zhazhiqiang/article/details/51577523 一 概要 vs中导出 dll的 ...
- Dll 导出函数那些破事
经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系. VC++支持两种语言:即 ...
- AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源
AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: ...
- 使用dumpbin命令查看dll导出函数及重定向输出到文件【轉】
查看dll导出函数,一般使用Viewdll等第三方工具. VS开发环境中,可以查看32位和64位的dll.具体使用方法如下: 1. 进入VS开发环境,然后Tools -> Visual stud ...
- 使用dumpbin命令查看dll导出函数及重定向输出到文件(VS自带)
以前查看dll导出函数,一般使用Viewdll等第三方工具.但由于Viewdll采用dephi编写,因此仅能查看32位的dll.其实微软已经帮我们提供一个查看dll导出函数的命令,嵌在VS开发环境中, ...
- DLL导出函数
使用DEF文件从DLL导出 模块定义(.def)文件时包含一个或多个描述DLL各种属性的Module语句的文本文件.如果不使用_declspec(dllexport)关键字导出DLL的函数,则DLL需 ...
随机推荐
- git gitlab 使用 提交代码解决冲突
1.更改完代码后,git push 发生错误 注: 此时,使用 git pull: 更新代码,git 会自动merge不同的更新, a. 如果git 自动merge成功,再进行 git push操作 ...
- numpy中的数学
1.dot,exp v = np.dot(arg1,arg2) #矩阵乘法 v2 = np.exp() # e的-x 次方
- 大型运输行业实战_day15_1_全文检索之Lucene
1.引入 全文检索简介: 非结构化数据又一种叫法叫全文数据.从全文数据(文本)中进行检索就叫全文检索. 2.数据库搜索的弊端 案例 : select * from product whe ...
- Unity3D中的高级摄像机跟随
在Unity3D中,先调整MainCamera在场景中的位置,然后把脚本挂到MainCamera上,摄像机跟随分为简单的摄像机跟随和高级摄像机跟随. 简单摄像机跟随: public class Cam ...
- asp.net之发送邮件2
public void SendMail(string from, string to, List<string> cc, string subject, string body) { M ...
- linux之基本命令讲解
前言 [root@localhost python]# vim /root/.bashrc export PS1='\[\e[32;1m\][\u@\h \w \t]#\[\e[0m\] source ...
- [leetcode]428. Serialize and Deserialize N-ary Tree序列化与反序列化N叉树
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- c#发送短信
短息计费平台:http://sms.webchinese.cn/User/?action=key 代码: using System;using System.Collections.Generic;u ...
- Centos和Redhat的区别与联系
CentOS的简介 CentOS是Community ENTerprise Operating System的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是Linux操作系统的一个发行 ...
- 利用scp 远程上传下载文件/文件夹
scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port ...