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

以前我曾经说过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,测试成功

猜你喜欢

转载自blog.csdn.net/baidu_25539425/article/details/79341314