首先教大家如何到处函数
.h文件
#pragma once
#include <ace/svc_export.h>
extern "C" ACE_Export void fun();
.cpp文件
#include "dll.h"
#include <iostream>
void fun()
{
std::cout << "void fun()" << std::endl;
}
这个时候编译代码会出现dll链接不一致的问题,需要在这里加入定义 ACE_BUILD_DLL
接下来教大家如何导出类
.h文件
#pragma once
#define ACE_BUILD_DLL
#include <ace/svc_export.h>
#include <windows.h>
#include <memory>
class A
{
public:
virtual void fun() = 0;
protected:
private:
};
extern "C" ACE_Export A* create(void);
.cpp
#include "dll.h"
#include <iostream>
class B : public A
{
public:
virtual void fun() override
{
std::cout << "success" << std::endl;
}
protected:
private:
};
A* create(void)
{
return new B;
}
调用dll的文件
#define _CRT_SECURE_NO_WARNINGS
#include <dll.h>
#include <ace/DLL.h>
#include <iostream>
typedef A* (*FUN)(void);
int main(int, ACE_TCHAR *[])
{
ACE_DLL dll;
int i = dll.open("Project2");
void *voidp = dll.symbol("create");
FUN f = reinterpret_cast<FUN>(voidp);
std::unique_ptr<A> a_ptr = std::unique_ptr<A>(f());
a_ptr->fun();
return 0;
}