cpp类导出为dll

第一步

首先要新建一个dll项目

第二步

1. 添加自己的.h文件(my_class.h)

#pragma once

#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif

using namespace std;


class MATHLIBRARY_API my_custom_class {
private:
	int item;
public:
	int sum_func(int item);
	string* print_mesg(string* msg);
};

2. 添加自己的.cpp文件(my_class.cpp)

int my_custom_class::sum_func(int item) {
	this->item = 4;
	return int(this->item + item);
}

string* my_custom_class::print_mesg(string *msg) {
	return msg;
}

3. 编辑项目属性

在这里插入图片描述
将第5步修改的地方改为你要export的类型

4. 注意点

  1. 细心的同学可能已经发现了,我
    1.1 返回string类型用的是指针,这是因为在导出dll时, 如果C++代码中使用了模板类,但是在封装dll导出的过程中没有导出该模板类的对象类型 ,会出现需要有 dll 接口由客户端使用的警告。
    1.2 类的私有成员item是在函数中定义,在类中只能用于声明。不然就会报错。

第三步

点击生成解决方案,可以找到生成的.dll.lib文件,然后:

  1. 照着这里 这里配置
  2. 写调用代码:
#include <iostream>
#include"my_class.h"

int main()
{
    //std::cout << "Hello World!\n";
    my_custom_class a_obj;
    int a = a_obj.sum_func(5);
    //a_obj.print_mesg("a test!");
    cout << a << endl;

    string as = "hello yuki";
    string* msg = &as;
    string* re = a_obj.print_mesg(msg);
    cout << *re << endl;

    return 0;
}

第4步

编译,运行
在这里插入图片描述

一、简介   AheadLib 是用来生成一个特洛伊DLL的工具,用于分析DLL中的函数参数调用(比如记录Socket send了什么等等)、更改函数功能(随心所欲了:)、更改界面功能(比如在Hook里面生成一个按钮,截获事件等等)。 二、使用   1.用 AheadLib 打开要模拟的 DLL,生成一个 CPP 文件。   2.用 Visual Studio 6.0/.NET 建立一个 DLL 工程,把这个 CPP 文件加入到项目中。   3.使用 Release 方式编译,生成的 DLL 将和原来的 DLL 具有一模一样的导出函数,并且能顺利把这些函数转发到原来的函数中。   4.AheadLib 还可以生成 Hook 代码,用于截取当前进程的所有消息,这样就可以随心所欲地处理各种消息了 (修改第三方程序界面功能的好助手)。 三、备注   1.如果导出函数过多,在 Visual Studio 6.0 中,如果出现编译错误,请在项目属性关闭与编译头功能。   2.如果是 C++ 、C __stdcall、C __fastcall 的方式导出的话,生成的函数声明将会还原成原代码级别(可能需要修改才能编译,比如导出C++的情况)。此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。   3.如果是 NONAME 或者 C _CDECL 方式导出(比如 DEF 导出,大多数Windows DLL都是这种情况,比如WS2_32等等),则使用#pragma comment(linker, "/EXPORT:...)导出,且指定导出序号。   4.如果系统中没有 DbgHelp.dll,将无法识别 C++ 模式的导出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值