以前我曾經說過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,測試成功