VC编程时DLL中导出函数的声明有两种方式

2011-04-16 17:33:01|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++|来源:唯设编程网

VC编程时DLL导出函数的方式主要有两种:一种方式是:在函数声明中加上__declspec(dllexport);另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。下面分别进行介绍:

方式一:在函数声明中加上__declspec(dllexport):

/// 在动态链接库程序中
/// 声明动态链接库(**.dll)的对外接口函数TestFuction
extern "C" __declspec(dllexport) int TestFuction(int nType,char *strPath,
    std::vector &vecData)
{
    ////do anything here////
    return 0;
}

/// 在外部希望调用动态链接库的程序中
/// 加载动态链接库(**.dll)并调用其对外接口TestFuction
void func()
{
    //typedef与函数TestFuction类型相同的函数指针为TESTDLL
    typedef int (_cdecl * TESTDLL)(int nType,char *strPath,
        std::vector &vecData);
    HINSTANCE hmod;
    //加载动态链接库**.dll
    hmod =::LoadLibrary(_TEXT("dll相对路径**.dll"));
    if(NULL == hmod)
    {
        TRACE("加载**.dll失败");
    }
    //定义一个与函数TestFuction类型相同的函数指针lpproc
    TESTDLL lpproc;
    //搜索**.dll中函数名为TestFuction的对外接口
    lpproc = (TESTDLL)GetProcAddress (hmod,"TestFuction");
    //如果搜索成功
    if(NULL != lpproc)
    {
        int nType = 0;
        char* strPath = "Data";
        std::vector vecData;
        //通过函数指针lpproc调用**.dll的接口函数TestFuction
        int nResult = (*lpproc)(nType,strPath,vecData);
    }
    //...
    //在恰当的时候释放动态链接库**.dll
    FreeLibrary(hmod);
}

方式二:采用模块定义(.def)文件声明

首先创建 一个DLL程序(DllTestDef)

<12>
发表评论0条 】
网友评论(共?条评论)..
VC编程时DLL中导出函数的声明有两种方式