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,測試成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章