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