关于BCB和MASM的混合编程

命令行删除描述文件_写一个删除lock文件的skill脚本 来源:IC技能搬运工 作者:小目Cadence软件使用过程中偶尔会遇到文件被lock的情况,这是Cadence软件对文件的一种保护措施,大部分情况都是对用户友好的,但是偶尔也会给用户带来困扰,给工作带来的一定的不便。文件是如何被锁的Cadence在用户打开文件进行编辑的时候会在文件的同一级目录新建一个lock文件,用来标识文件的状态。一般情况下如果文件被正常关闭,这个lock文件会在... 阅读详情
为什么?

关于混合编程
masm的优势在于macro的强大,对细节的精确控制;
C/C++的优势在于模块化,GUI容易控制
为什么不用TASm:支持库不全,它的macro不太会用,现在不升级
为什么不是BCB而不是VC:首先不会VC;好像VC也不存在与masm的兼容问题。BCB需要你用OMF方式来编译asm模块,在api的使用上有很大麻烦,本文主要是解决这个问题


¥怎样做?

一、在高级语言中用 asm{ }或宏定义方式,可应用在小范围内,缺点是只能用最初级的asm,C的编译器很难支持masm的高级应用
二、C中使用masm编译的obj或lib,优势明显,缺点是很难保证兼容性,即编译器难以通过
三、使用dll,很方便,但是要多出文件了


具体方法:
1、__cdecl 方式:
masm中类似于:
.386
.model flat
option casemap:none
...
PUBLIC  _Add3

.code
...
_Add3:
...
ret
end

注意开始的.model 中无stdcall开关,所以标号的声明前面需要加个_
然后编译(不可以应用任何系统lib、任何api)
在C中,声明
    #ifdef __cplusplus
    extern "C" {
    #endif

    int __cdecl Add3(int, int);

    #ifdef __cplusplus
    } /* extern "C" */
    #endif
注意声明中无_,因__cdecl的应用会加上_
此方式的缺点就是masm中不能应用api,因masm的lib都是stdcall方式(BCB的lib可不可以用??)




2、__stdcall 方式:
masm中类似于:
.386
.model flat, stdcall
option casemap:none
...
PUBLIC  Add3

.code
...
Add3:
...
ret
end

注意开始的.model 中有stdcall开关,所以标号的声明前面不需要加_,可以应用api
然后编译
在C中,声明
    #ifdef __cplusplus
    extern "C" {
    #endif

    int __stdcall _Add3(int, int);

    #ifdef __cplusplus
    } /* extern "C" */
    #endif
注意声明中需要加_,因__stdcall的应用不会加_
在无api引用时,此方式可以正常使用,但如果masm中使用了api,BCB编译时提示masm的lib不是OMF格式
解决:可以用BCB的lib..下一个问题是masm生成的obj中引入的api前面有_(因stdcall方式),现在是在obj中删除

如果api被声明成syscall方式,则不产生_,但调用者会错误的修复stack(in masm)
如果api被声明成c方式,产生_,而且调用者会错误的修复stack(in masm)
如果api被声明成stdcall方式(应该是默认方式),则产生_,调用者不会修复stack(in masm),但生成的api索引还会加上一个@8之类的尾巴,BCB的lib是非常干净的,_和尾巴导致BCB编译器不认。解决方法是手工在obj清除api名称中的垃圾,这差不多是目前最佳解决方案。



¥例:

in masm:

.386
.model flat, stdcall        ;使用flat, stdcall模式
option casemap:none        ;大小写敏感
includelib kernel32.lib        ;要使用BCB的lib, 它是omf格式,不要用masm带的lib
GetModuleHandleA  proto :dword    ;声明要使用的api,考虑包含masm的inc文件
PUBLIC  c Add3  ; :dword, :dword    ;声明对外的过程,注意我们使用C模式,编译后前面会加上_

.code
Add3  proc  near c aa:dword, bb:dword  ;proc定义部分,编译后会加上push ebp...因在下面我们用到了变量
;Add3:
  ;jmp  @f
  invoke  GetModuleHandleA, 0    ;测试使用api,正常
@@:
  mov  eax, aa        ;测试使用变量
  add  eax, bb        ;
  ret          ;返回,由调用者自行清理stack
Add3  endp          ;过程结束
end            ;汇编结束

注意BCB需要OMF格式的obj,要用bldomf.bat编译asm模块

这样生成的obj中api name前后都有多余的内容,为使之与BCB的lib兼容,必须手动清除。清除办法就是用objfixer清理一下,之后就可以在BCB里面连接了。

in BCB
in *.h file:
#ifdef __cplusplus
extern "C" {          ;声明外部C过程
#endif

int __cdecl Add3(int, int);      ;用C declare 方式,与masm中保持一致

#ifdef __cplusplus
} /* extern "C" */
#endif

in *.cpp file:
...
    ShowMessage(Add3(33,42));
...

这样就可以通过编译




¥现存难点:
变量及过程的相互引用还是很麻烦的,需要很小心的处理。另外不同call模式及编译器的工作方式可能会导致堆栈平衡问题,需要仔细的debug 
 
ECU诊断功能测试:从理论到实践 ECU诊断功能是指通过特定的诊断协议与ECU进行通信,以获取ECU的状态信息、故障码、数据流等,并执行特定的诊断操作。诊断功能的主要目的是帮助开发人员和维修人员快速定位和解决ECU中的问题,确保车辆的安全性和可靠性。UDS协议是ISO 14229标准的一部分,定义了一系列的诊断服务,如读取故障码、清除故障码、读取数据流等。UDS协议基于CAN(Controller Area Network)总线,具有较高的灵活性和扩展性。读取故障码是诊断功能中最基本的操作之一。通过读取故障码,可以快速定位ECU中的问题。 阅读详情

相关推荐

东华大学2020考研计算机OJ题目解答分享——进阶篇(4)

4 一个月的天数 作者: Turbo时间限制: 1S章节: 分支结构 问题描述 : 输入年和月,输出该月有几天。 输入说明 : 输入两个整数,中间以空格分隔,第一个整数表示年,第二个整数表示月。 输出说明 : 输出该年该月的天数,输出时,行首与行尾均无空格,仅输出一个整数。 输入范例 : 2000 2 输出范例 : 29 解答思路: 闰年和质数出题一样频繁,简单必会 AC代码 #include...

qq_38344326的博客 473

常用符号大全

❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©®™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉°✿ϟ☃☂✄¢€£∞✫★½✡×↙↘○◑⊕◣◢︼【】┅┇☽☾✚〓▂▃▄▅▆▇█▉▊▋▌▍▎▏↔↕☽☾の•▸◂▴▾┈┊①②③④⑤⑥⑦⑧⑨⑩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍿▓♨♛❖♓☪✙┉┋☹☺☻تヅツッシÜϡﭢ™℠℗©®♥❤❥❣❦❧♡۵웃유ღ♋♂♀☿☼☀☁☂☄☾☽❄☃☈⊙☉℃℉❅✺ϟ☇♤♧♡♢♠♣♥♦☜☞☝✍☚☛☟✌✽✾✿❁❃❋❀⚘☑✓✔√

javaThinker的专栏 6万+

Ubuntu22环境下Xinference与RAGFLOW集成:构建高效rerank模型服务【实战指南】

本文详细介绍了在Ubuntu22.04系统上,通过部署Xinference模型推理服务来加载bge-reranker-base等rerank模型,并将其与RAGFLOW框架集成的完整实战指南。该方案实现了模型服务的解耦与灵活管理,有效提升RAG系统的检索精度与答案相关性,并提供了从环境配置、服务启动、网络连接到性能调优及常见问题排查的全流程解决方案。

pluto的博客 501

特殊符号大全

自定义表情 (*゚∀゚*) (o^^o)♪ (✪ω✪) (✧◡✧)٩۹◔̯◔۶۶ ←w← ( ̄ˇ ̄) ヾ(´▽`;)ゝ (๑ó﹏ò๑) ┭┮﹏┭┮ (。´∀`)ノ (ÒωÓױ) _(:з」∠)_ (▼皿▼#) ✧*。٩(ˊωˋ*)و✧*。 ( •̥́ ˍ •̀ू ) (。•́︿•̀。) ( •̥́ ˍ •̀ू )嘤嘤嘤~" 。゚(゚≧□≦゚)゚。 早(...

ion_L的博客 14万+

使用ACOLITE对OLCI影像进行大气校正+批处理

使用ACOLITE对OLCI影像进行大气校正+批处理

mrzhy1的博客 7362

特殊符号大全(无穷的想象力)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34132768的博客 8394

Python 映射函数map()详解

Python 映射函数map()详解

分享我的点点滴滴,在成长路上与你同行! 2141

「5」线性代数(期末复习)

线性代数,期末考试。!线性代数,期末考试!!线性代数,期末考试!!!

一怀明月的博客 1134

Pixhawk变砖自救指南:从DFU模式到固件重刷全流程(附2.4.8实测)

本文详细介绍了Pixhawk飞控变砖后的自救方法,从DFU模式进入、固件重刷到高级恢复技巧全流程。特别针对国产版本boot0引脚未引出的特殊情况提供了解决方案,帮助用户通过QGC或Mission Planner地面站工具恢复飞控功能,适用于2.4.8等常见固件版本。

weixin_29168813的博客 339

前端build工程的时候 出现 `build.rollupOptions.external 的解决方法

看到这个Bug,理性分析: 遇到 Rollup failed to resolve import “@vue/devtools-api” 错误可能是由于 Pinia 使用了 @vue/devtools-api 模块,而 Vite 的 Rollup 插件无法解析这个模块 ps:但是我前一秒还可以,加了个别代码,突然不行,我是不相信的 = - =

码农研究僧的博客 3056

起名大全(内含花翅膀,特殊符号......)

特殊符号大全翅膀符号如下:1、❀҉ এ ృ ةم ʚΐɞ ʚɞ ﻬ ๑ ف ๓ ق2、 ͜ ✿҉ ͜ღ҉ ℘ ೄ ζั͡ ต ԅ️ ✾ ೄ೨3、 Ͽ҉ ✿ ೃ ✿҉͜ ✿ۣ ζั͡✿ ي ℳ ❀ ͜҉4、 ҉ ҉͡ ꧁༺๑๑༻꧂ დ ✎﹏ ๑҉/5、ʚΐɞ ༺ཌ ༒ད༻ ༺༒༻6、꧁❀༒❀꧂7、 ꧁༺༽༾ཊ࿈ཏ༿༼༻꧂扩展资料:其他特殊符号:♠♣♥♦☀☁☂❄☃♨웃유♙♚♛♜♝♞♟♧♡♂♀♠♣♥❖☽☾☪✿♂♀✪❀⚘♔♕♖♗♘❤☜☞☎☏⊙◎☺☻卍卐√×■◆e68a84e8a2ade799

yuanheng418的博客 39万+

电商平台系统需求规格说明书(示例)

​​电商系统​​:指本文件所描述的集商品展示、销售、支付、物流跟踪、用户管理等功能于一体的综合性在线购物平台。​​API​​:应用程序编程接口(Application Programming Interface),用于实现系统各模块之间或与外部系统之间的数据交互和功能调用。

跟佟格湾一起学习计算机知识吧~ 1267

iOS特殊符号集合

☮☯☹☺☻✓✗✪✩❄❀⌘⌥⇧♪♫♬☹☺☻✓✔✗✘☚☛☜☝☞☟✌✉✍✎✏✐✑✒✁✂✃✄✆✇✈♩♪♫♬♭♮♯⌘⌥⇧^⌛©®™π♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓☥✝✡☠☢☣☤☨✠☩☮☯☪☭☫☬☸☀☁☂☃☼❂☆☎☏♔♕♖♗♘♙☑♚♛♜♝♞♟☒♠♣♥♦♀♂♤♧♡♢♁☿❛❜❝❞❡❢❣❤❥❦❧❖♨✪✩✫✬...

cheshu134615564的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一些有趣的文字图标

今天在写脚本的时候,忽然发现xlua有个有趣的小标识 通过查看源码,发现是个文字图标,所以收集了一些: ㊗️????????????????????????????????????????????????????????????????????????‍‍????????????????????�♀️???????????????????? 更多有趣文字图标,会在后期陆续更新 ...

Tel17610887670的博客 4831

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

特殊符号大全(全彩色图标-复制着用)

各类符号大全,可以查阅后复制着使用,支持所有win设备。 

红目香薰 4万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

有趣的文字存储,可复制的特殊符号

可复制的特殊符号。

Aurora_juan的博客 2万+

常用网络&特殊符号大全(含彩色表情符号)

1、常用符号 ❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©®™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉°✿ϟ☃☂✄¢€£∞✫★½✡×↙↘○◑⊕◣◢︼【】┅┇☽☾✚〓▂▃▄▅▆▇█▉▊▋▌▍▎▏↔↕☽☾の•▸◂▴▾┈┊①②③④⑤⑥⑦⑧⑨⑩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍿▓♨♛❖♓☪✙┉┋☹☺☻تヅツッシÜϡﭢ™℠℗©®♥❤❥❣❦❧♡۵웃유ღ♋♂♀☿☼☀☁☂☄☾☽❄☃☈⊙☉℃℉❅✺ϟ☇♤♧♡♢♠♣♥♦☜☞☝✍☚☛☟✌✽✾✿❁.

HaleyTiger的博客 23万+

特殊符号大全(建议收藏_复制着用_数学符号最下面)

数字符号 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ㊀ ㊁ ㊂ ㊃ ㊄ ㊅ ㊆ ㊇ ㊈ ㊉ ㈠ ㈡ ㈢ ㈣ ㈤ ㈥ ㈦ ㈧ ㈨ ㈩ № ½ ⅓ ⅔ ¼ ¾ ⅛ ⅜ ⅝ ⅞ 希腊数字 Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ ⅺ ⅻ 月份符号 ㋀

红目香薰 25万+

输入文字加下划线_在文字下面加横线特殊符号输入方法 特殊符号

在文字下面加横线特殊符号输入方法- 特꯭꯭殊꯭꯭符꯭号有不少同学询问如何在文字中间加上一条横线,小编试过了,加在中间的横线符号有些地方能显示正常,有些地方又不能显示正常.中间符号像在电脑里面能显示正常看上去很有个性,但是在微信上面看却根本就不是那么回事,所以小编也是没有贴出来,真不好意思.小编这次讲的是如何在文字下面加上横线符号,这种符号看上去也是蛮个性的,小编觉得吧并不比横在中间的...

weixin_39824801的博客 3万+

起名小小参考

张扬性翅膀符号,这符号看上去就非常霸气,用这种符号做网名还是很拉风的。第三类:综合型翅膀符号网名,这种符号看上去比较独特,各有所爱。第一类:袖珍形翅膀符号,这种符号虽看上去。但还是很不错的,我觉得比较适合女生。

yuanheng418的博客 5428

【常用特殊符号大全】

常用特殊符号大全 常用特殊符号 ❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©®™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉°✿ϟ☃☂✄¢€£∞✫★½✡×↙↘○◑⊕◣◢︼【】┅┇☽☾✚〓▂▃▄▅▆▇█▉▊▋▌▍▎▏↔↕☽☾の•▸◂▴▾┈┊①②③④⑤⑥⑦⑧⑨⑩ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ㍿▓♨♛❖♓☪✙┉┋☹☺☻تヅツッシÜϡﭢ™℠℗©®♥❤❥❣❦❧♡۵웃유ღ♋♂♀☿☼☀☁☂☄☾☽❄☃☈⊙☉℃℉❅✺ϟ☇♤♧♡♢♠♣♥♦☜☞☝✍

chumotao的博客 1万+

html特殊符号拉丁文,拉丁文字符号大全,罗马字母

拉丁文字符大全:拉丁文扩展AĀ ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đ đ Ē ē Ĕ ĕ Ė ė Ę ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ œ Ŕ ŕ Ŗ ŗ Ř ř Ś ś Ŝ ...

weixin_28724003的博客 1万+

编程框架和MASM混合编程

前言涉及到UI和业务逻辑的地方,用MFC, WTL, DUILIB等成型的开发框架, 舒服的开发和用户的交互, 业务逻辑. 涉及到操作寄存器的操作,用RadAsm+MASM编译成的汇编版静态库, 提供函数给编程框架调用. 这样可以极大的提高开发效率. 如果用RadAsm + MASM硬生生的写SDK工程, 还真是让人有点享受不了啊…Demo工程下载点srcMfcFixMasm.zip代码片段M

博客标题不能为空 1250

常用符号大全 特殊符号

常用符号大全 特殊符号 特殊符号 编号序号 数学符号 爱心符号 标点符号 单位符号 货币符号 箭头符号 符号图案 希腊字母 俄语字母 汉语拼音 中文字符 日语字符 制表符 皇冠符号 emoji符号 (ㅤㅤㅤ)空白字符 ❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞÷↑↓◆◇⊙■□△▽¿─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©®™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉°✿ϟ☃☂✄¢€£∞✫★½✡×↙↘○◑⊕◣◢︼【】┅┇☽☾✚〓▂▃▄▅▆▇█▉▊▋▌▍▎▏↔↕☽☾の•▸◂▴▾

深联技控 1万+

简单几步开启手机OTG功能,

说到安卓手机,越来越多的功能方便了我们日常使用。如投影到高清电视的无线投屏功能、NFC功能,以及与周边设备数据交换的OTG功能。本文重点讲下OTG功能。 OTG功能是on the go的简写,让手机等移动设备实现与其他设备数据交换(U盘、移动硬盘、键盘鼠标),甚至是让手机具备给其他设备充电的功能。对内置空间较小且不支持SD卡扩充的Android手机来说,利用OTG外接U盘无疑是“救命”功

关注IT、科技、数码周边 18万+
上一篇: 网络信息探测技巧
下一篇: windbg命令
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值