c++类的导出和函数的修饰名

news2025/1/12 1:42:41

(一)c++中类的导出方法

类前面添加__declspec(dllexport)

头文件如下定义:

#pragma once


class __declspec(dllexport)  TestClass {
	int myint;
	double mydouble;
	float myfloat;
private:
	int myfun0(float* f1, int* i2);

public:
	TestClass();

	~TestClass();

	int myfun1(int i1, int i2, float f1, unsigned long ul1);

	static int myfun2(char* p1, int* p2);

protected:
	int myfun3(float* f1, int* i2);
};

__declspec(dllexport) int myfun4(char* p1, int* p2);

__declspec(dllexport) int __stdcall myfun5(char* p1, int* p2);

__declspec(dllexport) int __fastcall myfun6(char* p1, int* p2);

相应的cpp文件如下:


#include <stdio.h>
#include "test.h"
#include <string.h>
#include <String.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

TestClass::TestClass() {
	cout << "hello initialize TestClass" << endl;
}


TestClass::~TestClass() {
	cout << "hello uninitialize TestClass" << endl;
}

int TestClass::myfun0(float* f1, int* i2)
{
	return 1;
}

int TestClass::myfun1(int i1, int i2, float f1, unsigned long ul1) {

	int i = (i1 * 3 + i2) / f1 * ul1;
	return i;

}

int TestClass::myfun2(char* p1, int* p2) {
	int len = printf("myfun2 p1:%s p2:%d\r\n", p1, *p2);

	return len;
}

int TestClass::myfun3(float* f1, int* i2) {
	return 2;
}




__declspec(dllexport) int myfun4(char* p1, int* p2) {
	int len = printf("myfun3 p1:%s p2:%d\r\n", p1, *p2);

	return len;
}

__declspec(dllexport) int __stdcall myfun5(char* p1, int* p2) {
	int len = printf("myfun4 p1:%s p2:%d\r\n", p1, *p2);

	return len;
}

__declspec(dllexport) int __fastcall myfun6(char* p1, int* p2) {
	int len = printf("myfun5 p1:%s p2:%d\r\n", p1, *p2);

	return len;
}

(二)函数的修饰名

参考文章:点击跳转

C语言:
__cdecl: _funtion
__stdcall: _funcation@参数个数x4(32位)或参数个数x8(64位)
__fastcall: @function@参数个数x4(32位)或参数个数x8(64位)

c++语言:

  1. 以?开头,后面是函数名。
  2. 接下来的参数列表。 __stdcall调用方式下参数表的开始标识是"@@YG",__cdecl方式是"@@YA",__fastcall是"@@YI"。 X64下没有调用方式的区别,无论调用方式如何修饰,都是__cdecl方式。
  3. 返回值紧跟着参数表。参数表的第一项表示返回值类型。参数的简写如下:
X--void    
D--char    
E--unsigned char    
F--short    
H--int    
I--unsigned int    
J--long    
K--unsigned long(DWORD) 
M--float    
N--double    
_N--bool
U--struct


  1. PA表示指针,PB表示const类型的指针,后面的代号表明指针类型。如果相同类型的指针连续出现,以“0”代替,一个“0”代表一次重复。U表示结构类型,通常后跟结构体的类型名,"@@"表示结构类型名的结束。
  2. 参数表后以“@Z”标识整个名字的结束,如果该函数无参数,则以“Z”标识结束。
  3. 对于C++的类成员函数(其调用方式是thiscall),函数的名字修饰稍有不同。 (1) 函数名和参数表之间插入以“@”字符引导的类名
    (2) 参数表的开始标识不同。公有(public)成员函数的标识是“@@QAE”,保护(protected)成员函数的标识是“@@IAE”,私有(private)成员函数的标识是“@@AAE”,如果函数声明使用了const关键字,则相应的标识应分别为“@@QBE”,“@@IBE”和“@@ABE”。如果参数类型是类实例的引用,则使用“AAV1”,对于const类型的引用,则使用“ABV1”。

(三)测试验证

将上述工程编译链接后,拖入ida中,点击Exports窗口后,截图如下:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

发现 7 个 PM 优先级框架并立即获取 7 个免费模板

需求的优先级是项目经理工作中常被提及的&#xff0c;每一种优先级决策技术都有利有弊&#xff0c;也有对应的应用场景&#xff0c;如何选择合适的优决策技术&#xff0c;是产品经理做好优先级管理的前提。那么在项目管理工作中&#xff0c;要如何去评估需求的优先级呢&#xf…

(八) ElasticSearch数据可视化和分析工具Kibana安装和使用

1.概述 Kibana 是一个用于数据可视化和分析的开源工具&#xff0c;它是 Elastic Stack&#xff08;包括 Elasticsearch、Logstash 和 Beats&#xff09;的一部分。Kibana 提供了直观、交互式的用户界面&#xff0c;让用户能够以图表、表格、地图等形式实时探索和可视化存储在 …

南卡OE Pro开放式耳机震撼上市,突破音质与舒适度的极限!

南卡在近日又推出了一款全新升级的南卡OE PRO开放式蓝牙耳机&#xff0c;集齐了先进技术与卓越音质于一身&#xff0c;为用户带来无与伦比的音乐体验和舒适感&#xff0c;让您尽情享受自由的音乐之旅&#xff0c;而且有望打破开放式耳机历史记录&#xff0c;成为开放式耳机天花…

【软件教程】农林生环、水文、海洋、水环境、大气科学、人工智能、碳中和、碳排放、3S、R与统计等软件模型

本文涉及领域水文水资源、大气科学、农林生态、地信遥感、统计分析、编程语言等... 从软件基础到实践案例应用操作&#xff0c;手把手教学&#xff0c;提供永久回放观看和助学群长期辅助指导。适合课题组人员一站式学习&#xff0c;科研人员技术提升、企业单位工程项目、高校论…

Matlab机械臂建模:机器人工具箱的使用导入自己的机械臂模型

本文主要介绍如何在matlab中建立机械臂模型&#xff08;前提要下载了Robotics Toolbox机器人工具箱~&#xff09;&#xff0c;并进行基于正逆运动学计算的轨迹运动。对于已有的Solidworks机械臂三维模型&#xff0c;如何导入Matlab&#xff0c;并对其进行运动控制。 关于机器人…

带你手摸手从零开始撸一个脚手架

文章目录 为什么要搭建脚手架搭建流程梳理初始化脚手架命令参数处理询问用户信息下载模版代码等待提示交互脚手架命令行美化发布脚手架到npm 为什么要搭建脚手架 脚手架就是在项目启动的时候询问一些简单的问题&#xff0c;并且通过用户回答的结果去渲染对应的模板文件。 搭建…

四、使用Kibana执行elasticsearch的CRUD操作

目录 使用kibana测试 1、创建一个索引 2、创建索引并添加数据 3、获取索引的具体信息 4、通过GET请求_cat查看所有的_cat命令 5、修改数据 5.1、使用PUT修改 5.2、使用POST最后加上_update修改 6、删除文档 7、删除索引 8、查询操作 Rest风格说明 Rest是一种软件架构…

汽车一键启动开关发动机启动按钮点火开关图解

汽车改装件一键启动按钮单复位汽车点火开关一键启动按钮开关 &#xff08;用于配套启动主机使用&#xff09; 移动管家一键启动开关 YC360外观&#xff1a;黑色按钮上有3种不同的雷射灯&#xff0c;指示汽车不同的状态&#xff0c;和主机配套时可任意选灯的颜色。指示汽车的不…

AFPM系列消防设备电源监控系统的功能和一样

安科瑞虞佳豪 现代建筑内部&#xff0c; 消防报警、防火、灭火系统种类繁多&#xff0c;并分布在建筑内的各个角落。当灾情发生的时候&#xff0c;消防设备能否处于正常的工作状态&#xff0c; 直接关系到人民生命财产安全是否得到及时保全。 消防设备电源监控系统对于确保建…

Node.js包和模块的关系是怎样的?

在Node.js 中&#xff0c;会将某个独立的功能封装起来&#xff0c;用于发布、更新、依赖管理和进行版本控制。Nodejs 根据CommonJS规范实现了包机制&#xff0c;开发了NPM包管理工具&#xff0c;用来解决包的发布和获取需求。 Node.js的包和模块并没有本质的不同&#xff0c;包…

高频前端面试题汇总之CSS篇

一、CSS基础 1. CSS选择器及其优先级 选择器格式优先级权重id选择器#id100类选择器#classname10属性选择器a[ref“eee”]10伪类选择器li:last-child10标签选择器div1伪元素选择器li:after1相邻兄弟选择器h1p0子选择器ul>li0后代选择器li a0通配符选择器*0 对于选择器的优…

亚马逊云科技Serverless为手游《MARVEL SNAP》降低30%成本

经典的漫威IP&#xff0c;酷炫的卡牌对战&#xff0c;丰富的故事情节&#xff0c;这款移动游戏《MARVEL SNAP》一经上线就深得全球玩家喜爱。在The Game Awards 2022的年度颁奖典礼上&#xff0c;它更是以出色的表现&#xff0c;一举斩获最佳移动游戏奖项。 其研发公司Second …

centos7~等 FTP登录时,解决报错530,500,421等错误

问题描述 1、添加了用户但是莫名登录不能用户真的是见鬼了,这那遭得住呀&#xff01;我干&#xff0c;出现的问题如下图所示&#xff1a; cat /etc/passwd 查看是否是之前添加的用户&#xff0c;并确定是否存在。 若没有创建成功&#xff0c;则使用useradd -s /sbin/nologin …

矩阵向量乘法MPI程序的性能评估

文章目录 前言一、实验代码二、实验运行效果三、问题以及思考总结 前言 要求&#xff1a;对矩阵向量乘法MPI程序进行不同输入规模、不同进程数的执行和计时&#xff0c;并对得到运行时间进行计算分析&#xff0c;据此评价该程序的强扩展性和弱扩展性。最后总结学习心得&#x…

feign调用get请求的接口时,出现“Request method ‘POST‘ not supported“

上面是错误的写法 下面是正确的写法 其实就是在feign接口的参数中加了个SpringQueryMap注解 SpringQueryMap是微服务之间调用&#xff0c;使用openfeign通过GET请求方式来处理通过实体类来传参情况的注解。 注意&#xff1a;被SpringQueryMap注解的对象只能有一个 如果需要传…

vulhub-struts2-S2-001 远程代码执行漏洞复现

漏洞原理 该漏洞因用户提交表单数据并且验证失败时&#xff0c;后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析&#xff0c;然后重新填充到对应的表单数据中。如注册或登录页面&#xff0c;提交失败后一般会默认返回之前提交的数据&#xff0c;由于后端使用%{va…

Python 中常用的数据类型及相关操作详解

文章目录 列表&#xff08;Lists&#xff09;创建列表访问列表元素添加元素到列表删除列表元素切片&#xff08;Slicing&#xff09;其他常用操作 元组&#xff08;Tuples&#xff09;创建元组访问元组元素元组长度其他常用操作 字符串&#xff08;Strings&#xff09;创建字符…

低成本渲染提速!掌握这6点,不换电脑也能迅速提升渲染速度

之前一期给大家分享过影响渲染速度的三个“大坑”: 渲染干货 | 渲染速度太慢&#xff1f;很有可能你是踩了这些坑https://blog.csdn.net/LhcyyVSO/article/details/131191936 本期再来谈谈如何在不换电脑配置的情况下&#xff0c;以更低的成本提升你的渲染速度&#xff0c;毕…

无人机电池能不能上高铁以及什么型号的电池可以上高铁

无人机电池能不能上高铁以及什么型号的电池可以上高铁 高铁关于电池的限制电池参数介绍可上高铁的无人机锂电池6S电池3S电池 高铁关于电池的限制 2022年7月1日起施行的《铁路旅客禁止、限制携带和托运物品目录》规定,充电宝、锂电池单块额定能量不超过100Wh 电池参数介绍 明…

致创业者,亚马逊云科技中国峰会“创业者之日”邀您相聚

IDC预测&#xff0c;到2025年全球数据规模将达到175 ZB&#xff0c;这为人工智能模型训练提供了海量数据资源&#xff0c;全球AI产业迅速发展为创业者们带来了巨大的机遇&#xff0c;但也提出了全新的挑战。新的市场、高效的工具和智能的资源&#xff0c;开辟了创新的领域和商业…