首先是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;
}
提前致谢
答案 0 :(得分:1)
将createDevice更改为此
XXX_API Device* createDevice(int w, int h)
{
Device* dev = new Device();
dev->createDevice(w, h);
return dev;
}
据推测,你应该添加一个destroyDevice函数来释放内存。