您的位置:首页 > 编程语言 > C语言/C++

c++编写供其他工具使用的dll

2018-02-20 23:00 330 查看
以前我曾经说过dll的编写,但是以前编写的dll无法供其他工具使用

以前我们是这样写的

DllGenerator.h

#ifndef _DLLGENERATOR_H
#define _DLLGENERATOR_H

#ifdef DLLPROJ
#define AMB extern "C" _declspec(dllexport)
#else
#define AMB extern "C" _declspec(dllimport)
#endif

AMB int add(int a, int b);
AMB int sub(int a, int b);

#endif


DllGenerator.cpp

#include "stdafx.h"
#define DLLPROJ
#include "DLLGenerator.h"

int add(int a, int b)
{
return a + b;
}

int sub(int a, int b)
{
return a - b;
}


其中extern “C”是关键,有了extern “C”就可以摆脱c++的命名机制,输出函数名add,sub,这样这个dll就可以被c程序所使用了

但是,如果vb想使用这个dll呢,不好意思,不识别,想要识别这个函数,就必须要加上__stdcall约定,由于vb不是c,所以还要去掉extern “C”

改进之后的程序是这样的

DllGenerator.h

#ifndef _DLLGENERATOR_H
#define _DLLGENERATOR_H

#ifdef DLLPROJ
#define AMB _declspec(dllexport)
#else
#define AMB _declspec(dllimport)
#endif

AMB int __stdcall add(int a, int b);
AMB int __stdcall sub(int a, int b);

#endif


DllGenerator.cpp

#include "stdafx.h"
#define DLLPROJ
#include "DLLGenerator.h"

int __stdcall add(int a, int b)
{
return a + b;
}

int __stdcall sub(int a, int b)
{
return a - b;
}


编译成功之后,我们再vb中试一下



红色高亮部分是使用前的声明,请自行百度

结果如图



结果为3,测试成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: