调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

news2024/11/19 16:49:45

调用方出错提示如下:

调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

可能原因:

修改之前的C++定义:

extern "C" __declspec(dllexport) void G(int a);

void G(int a)

{

}

改成:

修改之后的C++定义:

extern "C" __declspec(dllexport) void  _stdcall G(int a);
void  _stdcall G(int a)
{
    
}

原因

__stdcall是函数调用约定的一种,函数调用约定主要约束了两件事:

1.参数传递顺序

2.调用堆栈由谁(调用函数或被调用函数)清理

常见的函数调用约定:stdcall cdecl fastcall thiscall naked call

__stdcall表示

1.参数从右向左压入堆栈

2.函数被调用者修改堆栈

3.函数名(在编译器这个层次)自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸

在win32应用程序里,宏APIENTRY,WINAPI,都表示_stdcall,非常常见。

其它函数调用约定

  _fastcall 是编译器指定的快速调用方式。由于大多数的函数参数个数很少,使用堆栈传递比较费时。因此_fastcall通常规定将前两个(或若干个)参数由寄存器传递,其余参数还是通过堆栈传递。不同编译器编译的程序规定的寄存器不同。返回方式和_stdcall相当。
  _thiscall 是为了解决类成员调用中this指针传递而规定的。_thiscall要求把this指针放在特定寄存器中,该寄存器由编译器决定。VC使用ecx,Borland的C++编译器使用eax。返回方式和_stdcall相当。
  _fastcall 和 _thiscall涉及的寄存器由编译器决定,因此不能用作跨编译器的接口。所以Windows上的COM对象接口都定义为_stdcall调用方式。
  C中不加说明默认函数为_cdecl方式(C中也只能用这种方式),C++也一样,但是默认的调用方式可以在IDE环境中设置。
 

https://img-blog.csdnimg.cn/ea2601b3918f4aef836b5fe30da2ebf7.gif#pic_center#pic_center

附属内容

开发测试运行环境

操作系统:Win10或win7

开发环境:VS2022或VS2019

C++17

视频课程

CSDN学院有基础算法的C++实现的课程,请使劲戳下面的链接。

https://edu.csdn.net/course/detail/38771

C++入职培训,C#入职培训等课程可以学习

https://edu.csdn.net/lecturer/6176

相关下载

本人算法的总结《闻缺陷则喜算法册》,可到CSDN下载频道下载,doc版的。

https://download.csdn.net/download/he_zhidan/88348653

几句话,不吐不快。

好的算法让程序生气勃勃。

闻缺陷则喜,早解决问题,让自己和老板安心。

墨家:有所得,以墨记。

https://img-blog.csdnimg.cn/f95ddae62a4e43a68295601c723f92fb.gif#pic_center

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

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

相关文章

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分:CI CD、设计模式、数据库

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分:CI CD、设计模式、数据库前言CI/CD第 1 部分 - 带有 CI/CD 的 SDLC第 2 部分 - CI 和 CD 之间的区别第 3 部分 - CI/CD 管道 Netflix Tech Stack (CI/CD Pip…

DNSPod十问李攀:程序员如何卖出全国爆火降温杯?

本期嘉宾 李攀 1030Design创始人 李攀,1030Design创始人。带领团队打造了55度杯、讯飞翻译机、“一个天台”等现象级爆款,荣获Reddot、金点设计等多项国内外知名设计奖项,在公司战略、品牌定位、产品创新及新零售等领域有着丰富的经验。北京…

10G SFP+线缆选购指南

凭借低成本和易安装的优势,在10G速率短距离传输中SFP线缆比SFP光模块更受欢迎。本文将从类型、优势、应用和选购指导等方面为您介绍10G SFP线缆,旨在帮助您更快做出购买决策。 10G SFP线缆:定义和类型 SFP线缆是一种高速线缆,两…

非科班,补基础

大家好,我是大彬~ 今天跟大家分享知识星球小伙伴关于【非科班转码如何补基础】的提问。 往期星球提问整理: 读博?找工作? 性格测试真的很重要 想找一份实习工作,需要准备什么 球友提问: 大彬大佬&#xf…

Ubutun配置C语言环境

问题起因 因为老师说上课会给我们一段代码让我们读取这个程序也就是进程的内存,从而破解明文,但老师给的程序是Linux环境的也就是二进制文件,所以来配置一下Linux下的C语言环境 解决方法 首先先下载gcc,因为我以前下载过所以直…

蓝牙音视频远程控制协议(AVRCP)介绍

零.声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。 第二篇:Trans…

VT-VSPA1-508-1X/V0替代型模拟放大器

适用于控制所有无电位置反馈的直动式和先导式比例方向阀、比例压力阀。如: DBETX–...–8 DBE6X–...–8 DRE6X–...–8 DBE10Z–...–8 DRE10Z–...–8 通过 24V 输入或跳线改变内部控制值信号极性。 – 通过相位识别(24V 输入)或斜坡…

C++类中函数重写(成员函数覆盖)

在本文中,您将学习函数重写。此外,您还将学习如何在C 编程中评估基类的函数重写。继承允许软件开发人员从现有类派生新类。派生类继承基类(现有类)的功能。假设基类和派生类都具有一个具有相同名称和参数(参数的数量和…

OA和别的系统对接的java文件,调的websevice接口的参考实例

//代码块 package com.bj520.action; import com.alibaba.fastjson.JSON; import com.bj520.service.zs.Webfcs; import com.bj520.service.zs.WebfcsLocator; import com.bj520.util.LogUtil; import com.bj520.util.ZsResultUtil; import weaver.conn.RecordSet; import wea…

Capture One 23 Pro for Mac/win:专业图片编辑的最佳选择

在当今的数字时代,图片编辑软件如雨后春笋般涌现,但并非所有软件都能满足专业摄影师的需求。如果你追求卓越的图像质量、高效的编辑功能和一流的用户体验,那么Capture One 23 Pro无疑是你不二的选择。 Capture One 23 Pro以其出众的图像质量…

python控制负数以16进制整型格式输出

实际使用时候,发现 python输出负数进程是 十进制和16进制一样的,就是16进制多了一个负号,和预期结果不同;比如我想要 -1输出 0xFFFFFFFF,可以参考如下方式; def TestPrintf(): ret -3print("test1 r…

Find My资讯|苹果将推迟至2025年量产AirTag 2,Find My获得市场认可

郭明錤调整今年 8 月关于苹果第二代 AirTag 的预测,表示该产品量产时间从此前的 2024 年第 4 季度,延迟到 2025 年,会进一步推迟新款上市日期。 AirTag 是用于固定在背包、行李和其他物品上的配件。任何搭载 U1 芯片的设备都可以用于精确查…

代码随想录算法训练营第五十八天 | 583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 链接: 代码随想录 (1)代码 72. 编辑距离 链接: 代码随想录 (1)代码

哪个牌子的台灯对孩子的视力好?对孩子视力好的台灯推荐分享

现在市面上台灯品牌众多,价格不一,品质更是参差不齐,所以要学会如何选择适合孩子的台灯。光源质量是重要因素,光源是直接影响到孩子的视力, 一般来说,光源质量主要看照度、亮度和均匀度、显色指数等&#x…

npm publish发布到在线仓库时,提示:Scope not found

当npm publish发布时,控制台提示:Scope not found,具体错误信息如下: npm notice npm ERR! code E404 npm ERR! 404 Not Found - PUT https://registry.npmjs.org/xxx%2fxxx - Scope not found npm ERR! 404 npm ERR! 404 xxx/xx…

static设置变量的使用方法

重点: 1.长时间不使用static会忘记,记录一下,static变量的设置使用。 class Test { public:Test() default;~Test() default;public:int GetNum() { return m_num; };void SetNum(int num) { m_num num; }; private:static int m_num; }…

springboot188基于spring boot的校园商铺管理系统

项目名称:springboot188基于spring boot的校园商铺管理系统 点击这里进入源码目录 声明: 适用范围: 本文档适用于广泛的学术和教育用途,包括但不限于个人学习、毕业设计和课程设计。免责声明: 特此声明,本…

Android一些新的技术栈,你都会哪些?

Jetpack Compose: Jetpack Compose是一种全新的声明式UI框架,用于构建Android应用的用户界面。它使UI开发更加简单和直观,通过使用Kotlin语言来创建交互式和动态的UI组件。 Kotlin Multiplatform: Kotlin Multiplatform允许开发者…

外贸出口小型取暖器UL 1278怎么办理

UL1278是针对出口小型取暖器的安规认证,办理流程和要求因地区而异,具体的流程和要求可以参考当地的UL认证标准和操作指南。一般来说,办理UL1278需要以下步骤: 1. 准备申请材料 2. 联系UL认证机构 3. 样品测试 4. 文件审核 5. 认证…

Nginx平滑升级重定向rewrite

文章目录 Nginx平滑升级&重定向rewritenginx平滑升级流程环境查看旧版的配置信息下载新版nginx源码包和功能模块包编译配置新版本平滑升级验证 重定向rewrite配置重定向准发访问测试 Nginx平滑升级&重定向rewrite nginx平滑升级 流程 平滑升级: (升级版本、增加新功…