吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 1203|回复: 5

[MFC] 一个VC++编程疑惑的问题

[复制链接]
zyyujq 发表于 2022-8-15 11:38 | 显示全部楼层 |阅读模式

本帖最后由 zyyujq 于 2022-8-18 11:16 编辑

运行环境:WINDOWS
涉及工具:VS2017、VB6
编程语言:VC++、VB6

以下为主题内容:详解VC++动态链接库中的结构成员规则与调用约定,完整原文在下面链接:

https://blog.csdn.net/zyyujq/article/details/126314376
https://blog.csdn.net/zyyujq/article/details/126400139

实例使用VB6编译的程序,调用VC2017编译的DLL动态链接库:

VB6里设置结构体和调用函数:

[Visual Basic] 纯文本查看 复制代码
Type LogicParam
   Dim eBool as [/font][/color]Boolean[color=rgb(77, 77, 77)][font=-apple-system, "]
   Dim CMBool as Boolean
   Dim NBool as Boolean
   Dim EBool as Boolean
End Type

Public Declare Sub ParamInitializn Lib "Test.dll" (ByVal X As Integer, ByVal LP As LogicParam)'参数初始化

Private Sub Command1_Click()
   Dim BType as LogicParam
   BType.eBool = True
   BType.CMBool = False
   BType.NBool = True
   BType.EBool = False
   call ParamInitializn(2022,BType)
End Sub


[C++] 纯文本查看 复制代码
//Test.h //测试头文件
struct LogicParam
{
        bool eBool;
        bool CMBool;
        bool NBool;
        bool EBool;
};

void ParamInitializn(int X, struct LogicParam PP);
 
//Test.cpp //测试源文件
void ParamInitializn(int X, struct LogicParam PP)
{
  char buf[500];//定义字符串数组
  const char *showFormat = " X = %d\n eBool = %d\n CBool = %d\n NBool = %d\n EBool = %d\";//定义显示格式
  sprintf_s(buf, showFormat , X, PP.eBool , PP.CMBool, PP.NBool, PP.EBool);//将变量按格式赋予 buf
  MessageBoxA(0, buf, "测试DLL调用参数", 0);//对话框显示
}
//Test.def
LIBRARYEXPORTS    
      ;此处可以是显式导出
        ParamInitializn @1



DLL 动态链接库无法正确获得 LogicParam 结构体值,无论怎么设置结构成员对齐值,还是使用 *LogicParam 指针参数 。


当使用如下结构体,使逻辑变量参杂在其它变量中,使结构体按其它变量字节对齐,DLL 动态链接库可以正确获取 LogicParam 结构体值。
[C++] 纯文本查看 复制代码
struct LogicParam
{
        int A;
        bool eBool;
        int B;
        bool CMBool;
        int C;
        bool NBool;
        int D;
        bool EBool;
};






评分

参与人数 8HB +8 THX +3 收起 理由
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
消逝的过去 + 1
蓝色火焰 + 1 + 1
今日下雨 + 1
sjtkxy + 1 + 1
顾澜笙秋 + 1
飞刀梦想 + 1
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
老飞飞 发表于 2022-8-16 16:09 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
sjtkxy 发表于 2022-9-30 05:21 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
cfan 发表于 2022-10-7 11:33 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
吾爱稀饭 发表于 2022-10-11 23:25 | 显示全部楼层

感谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
波真 发表于 2024-3-3 11:38 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表