- 2024-08-11__stdcall介绍
__stdcall 是一种函数调用约定(CallingConvention),它在不同的操作系统和编程环境中有着不同的支持和实现方式,但主要是在Windows平台上被广泛使用。在Windows中,它指定了函数如何接收参数(通过栈传递,参数从右到左入栈)、如何返回值,以及谁负责清理栈(在这个约定中,是由被调用的
- 2024-07-21封装C项目为dll
这是头文件,定义了一个接口MyHeader.h。#ifndefMYHEADER_H#defineMYHEADER_H//定义导出DLL函数的宏#defineMY_API__declspec(dllexport)#ifdef__cplusplusextern"C"{ //告诉编译器下面是C语言代码#endif //函数声明 MY_APIint__stdcalladd(intx,inty
- 2024-05-15C++封装dll(__cdecl和__stdcall)
【1】使用__stdcall还需要添加def文件编译,使用工具DEPENDS.EXE打开dll文件成功。【2】使用__cdecl直接编译即可,不需要导入def文件
- 2024-04-29delphi 2006中,使用stdcall调用约定时,压缩结构参数的bug分析
问题今天遇到一个很奇怪的问题,有一个dephi2006写的dll,使用了stdcall的调用约定,参数传递了结构体,在函数中收到的结构体值和传入的不一致,最后一个boolean类型,应为False,收到的是True,如下图:代码//结构体定义RStruct=packedrecordi1:Integer;i2:Integer;i3:I
- 2024-03-30函数调用约定——__cdecl与__stdcall
1.定义函数调用约定,也称函数调用协议,是指在函数调用时,确定函数参数如何传递给被调用的函数,以及如何返回结果值给调用者的一系列规则。也就是函数的调用者与被调用者之间如何传参以及如何恢复栈平衡。2.职责规定了函数参数的压栈顺序,即有多个参数时,按照什么顺序进行压栈;规定了
- 2024-02-23程序是怎样跑起来的第五章观后感
读完第五章,我了解到了内存和磁盘之间的关系。磁盘缓存,是通过使用内存来提高磁盘访问速度的,虚拟内存是指把磁盘的一部分作为假想内存来使用的,一般来说,程序需要被解读出来,然后运行,如果不读入内存就无法运行这一机制,我们称为储存程序方式。由于WINDOWS具有多重任务,有时同时运行多个
- 2024-02-20程序是怎么跑起来的第五章
程序保存在存储设备中,通过有序地被读出来实现运行,这一机制被称为存储程序方式。计算机中主要的存储部件是内存和磁盘。存储在磁盘中的程序需要读入到内存后才能运行。磁盘缓存指的是把从磁盘中读出的数据存储到内存空间中的方式,把低速设备的数据保存在高速设备中,需要时可以直接将
- 2024-02-18内存与磁盘的亲密关系
计算机中主要的存储部件是内存和磁盘。磁盘中存储的程序,必须要加载到内存后才能运行。在磁盘中保存的原始程序是无法直接运行的。磁盘缓存指的是把从磁盘中读出的数据存储到内存空间中的方式。磁盘缓存提高访问速度的机制:(1)首次读出时从磁盘读出(低速)(2)保存读出的数据(3)
- 2023-11-10调用Delphi DLL 注意事项
1.使用统一的调用约束(__stdcall)2.arrayof 调用delphi接口:procedureProcessArray(constArr:arrayofInteger);stdcall; VC:typedefvoid(__stdcall*ProcessArrayFunc)(constint*,int);ProcessArrayFuncprocessArray=(ProcessArrayFunc)GetProcAddress(
- 2023-09-06Windows平台里的grep——1.Borland grep
grep来自英文词组“globalsearchregularexpressionandprintouttheline”的缩写,意思是用于全面搜索的正则表达式,并输出相应行。Unix和Linux都直接提供了grep命令。然而,不管是在CGI界面的MS-DOS系统还是GUI界面的Windows系统中,微软都没有直接提供grep命令,所提供的find命令在
- 2023-08-22笔试题
目录stdcallcdeclstdcallcdecl__cdecl和__stdcall都是参数从右到左入栈。__cdecl是调用者负责清除栈中的参数,如A函数中调用B函数,参数由A函数负责清除;__stdcall是被调用者负责清除栈中的参数,如A函数中调用B函数,参数由B函数负责清除。
- 2023-06-14关于函数指针的一些问题小结
最近接到一个需求,使用sdk提供的消息回调,一般我们是继承sdk的消息类,然后sdk的消息回调(虚函数)会在有消息的时候调用回调指针,从而触发回调不过因为sdk那边又对该消息类二次封装了并提供了一些接口,所以在研究二次封装的方法时,遇到了一些有意思的问题,故记录下typedefvoid(_
- 2023-06-09编写一个简单的COM组件
参考网站:编写一个简单的COM组件_arayofsunshine(1)用MIDL编写.idl文件//将以下代码保存成IXIYIZ.idl文件//在命令行上进行编译,编译命令://midlIXIYIZ.idl//生成IXIYIZ.h,dlldata.c,IXIYIZ.h,IXIYIZ_p.c//其中IXIYIZ.h,IXIYIZ.h文件是我们目前所需要的import"un
- 2023-06-04PE学习——导出表,加载dll并GetProcAddress获取函数地址的内在原理
导出表一个可执行程序是由多个PE文件组成,这些PE文件依靠倒入表、导出表进行联系,导出表存储着PE文件提供给其他人使用的函数列表,导入表则存储着PE文件所需要用到的PE文件列表。从PE文件的角度去看,任何PE文件都可以有导入、导出表,从一般情况下来看,EXE文件不会提供导出表,也就是不会
- 2023-05-31vst实例(9)创建编辑器
先上编辑器单元的代码:uniteditlink;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,VirtualTrees;typetcomboeditlink=class(TInterfacedObject,IVTEditLink)privateFedit:TComboBox;itemstrs:
- 2023-05-08P48静态链接库-动态链接库
静态编译:优点:实现代码的重复使用方便缺点:将二进制代码直接编译到exe中反汇编无法识别使用静态链接生成的可执行文件体积较大,造成浪费 我们常用的printf、memcpy、strcpy等就来自这种静态库 静态链接库的代码在lib中而动态链接库的代码在dll里面创建静态链接库:
- 2023-04-08MSTSCLib_TLB 修正
delphi7 导入RDPAcitveX 生成的MSTSCLib_TLB.pas delphi真的好惨啊,资料都是其他语言的。用到都得自己转换,自身导入生成的还有问题。或者用法根本就不一样。生成的是这样的:IMsRdpClientNonScriptable=interface(IMsTscNonScriptable)['{2F079C4C-87B2-4AFD-97AB-20CD
- 2023-04-04lazarus在龙芯电脑使用域天加密锁要注意的事项
lazarus在龙芯电脑使用域天加密锁要注意的事项:1、使用域天官方的接口单元时加密锁的so文件必须拷贝到/usr/lib/这个目录。2、普通用户如果调用加密锁so出错或失败,需要进行以下操作:建一个规则文件放/etc/udev/rules.d.文件内容如下:SUBSYSTEM=="input",GROUP="input",MODE=
- 2023-02-105.4 节约内存的编程方式
由于Windows具有多任务功能,在巨大的Windows操作系统中可以同时运行多个应用,因此,即使是512MB的内存,有时也无法保证流畅运行。Windows操作系统经常为内存不足所困。像Window
- 2022-12-30转载:调用规范stdcall、cdecl、fastcall、thiscall 、naked call的汇编理解 (https://www.cnblogs.com/kwinwei/p/11527081.
当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作
- 2022-11-20DLGOPENGL-04理论知识
什么是OPENGL?我们需要知道OpenGL是“开放图形库”的缩写。OpenGL是一种API,它允许我们相对容易地在屏幕上输出图形,而不必确切地知道背景中发生了什么。整个过程在某种程度
- 2022-11-03__stdcall 与 __cdecl 的含义
1.作用:都是修饰函数2.含义:明确指出函数的参数在调用时以什么顺序压栈!3.范例: 右键打个断点、然后执行、进入反汇编: 7E7h指的就是2023字面量、h表示这是个
- 2022-10-23EverythingSDK中Everything.h转的Everything.pas
看到一个使用EverythingSDK的文章:https://www.cnblogs.com/masg/p/16251099.html但博主没有发Everything.pas单元,我根据Everything.h转了一个,可以用。unitEverything;
- 2022-10-18C#操作CPU内存时 winIO32位,64位的使用(运行时要用管理员身份)注意事项
一、WinIo说明WinIO程序库允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作。通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,它绕过了Wi
- 2022-09-26C/C++ __cdecl和__stdcall的区别和联系
函数的调用约定涉及了函数参数的入栈顺序、清栈主体(负责清理栈的主体:函数自身还是调用函数者?)、部分名称重整。如,在C编译方式下有_stdcall、_cdecl等调用约定,在C++编译方式