动态链接库函数导出

时间:2013-11-30 08:20:53

标签: c++ pointers dll

首先是main.h文件 - main.h

#ifndef __MAIN_H__
#define __MAIN_H__

#include <iostream>

#ifndef _BUILD_DLL
#define XXX_API __declspec(dllexport)
#else
#define XXX_API __declspec(dllimport)
#endif

#include "device.h"

// Core functions
namespace xxx
{
    XXX_API void createDevice(int w, int h);
}

#endif // __MAIN_H__

的main.cpp

#define _BUILD_DLL

namespace xxx
{

XXX_API void createDevice(int w, int h)
{
    Device dev;
    dev.createDevice(w, h);
}

}

device.h中

#ifndef __DEVICE_H__
#define __DEVICE_H__

namespace xxx
{

class Device
{
public:
    Device();
    virtual ~Device();

    XXX_API void createDevice(int width, int height);

}; // end of class

} // end of namespace

#endif

device.cpp

#include "main.h"

namespace xxx
{

   Device::Device()
   {
   }

   Device::~Device()
   {
   }

   XXX_API void Device::createDevice(int width, int height)
   {
    std::cout << "Width: " << width << std::endl;
    std::cout << "height: " << height << std::endl;
   }

} // end of namespace

这是创建dll和库的文件。 这里是test.cpp,它创建调用lib函数的应用程序 -

#include "main.h"

int main()
{
    xxx::createDevice(800, 600);

    std::cout << "Press the ENTER key to exit.";
    std::cin.ignore(std::cin.rdbuf()->in_avail() + 1);

    return 0;
}

正如您所看到的,我正在调用createDevice(int,int)来创建设备。我想知道的是如何导出dll调用,以便我可以获得指向该设备的指针,以从test.cpp调用其成员函数。像这样 -

#include "main.h"

int main()
{
    xxx::Device* dev = createDevice(800, 600);

    std::cout << "Press the ENTER key to exit.";
    std::cin.ignore(std::cin.rdbuf()->in_avail() + 1);

    return 0;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

将createDevice更改为此

XXX_API Device* createDevice(int w, int h)
{
    Device* dev = new Device();
    dev->createDevice(w, h);
    return dev;
}

据推测,你应该添加一个destroyDevice函数来释放内存。