BCB的嵌入ASM的串口通讯DLL在win2000下怎么设置编译以后可以使用

rick1126 2003-07-06 03:32:15
是电视台的编辑机IC卡利用串口做通讯, 驱动部分原本使用汇编, 在foxpro下面调用, 升级用PB开发应用, 使用bcb对于汇编代码进行dll封装给pb程序调用, 在win98下面可以使用, 到了win2000调用发现程序自动退出, dll是使用bcb编译的, 不知道要添加什么设置才可以让dll可以在win200下面继续可用, 我的任务, dll是第三方写的不再继续维护, 调试不好就只有继续呆在武汉回不了上海了, 5555
...全文
58 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rick1126 2003-07-07
  • 打赏
  • 举报
回复
是呀, 对方不给硬件操作规范, SDK也没有得写, 否则我就自己来了.
土著巫师 2003-07-07
  • 打赏
  • 举报
回复
1、用ASM对串口操作在WIN9X可以使用,WINNT/2K都不可以。
2、如果ASM实现的串口功能不太复杂的话,建议用WIN SDK重新写过,在网上应能找到EXAMPLE
3、如果功能相对较多,找一个控件,例如TComm(C/C++写的),或者直接取一部分出来,不过做成DLL供PB使用工作可能要大一点;不知道你说的PB是PowerBuilder还是PowerBasic.

祝愿好运。
xiaoguoru 2003-07-07
  • 打赏
  • 举报
回复
在Delphi底下试一下,可不可以!
netsys2 2003-07-07
  • 打赏
  • 举报
回复
98与2000内核不一样,硬件的驱动也完全不一样。

因此绝对不能将98用在2000,在2000下得开发新的驱动接口!

至于汇编,98、2000、NT、XP都支持。


给你一个在CB中例子:

注意CB函数的入口,有很多东西已经自动入栈

bool _fastcall IsIPv4Address(char *s_add)
{
#pragma warn -8070 // 屏蔽无return警告
#pragma warn -8002 // 屏蔽嵌入汇编警告
__asm
{
//PUSH EDI // 编译器产生的函数框架代码已经保存ESI、EDI、ECX、EBP(Stack Frames)
//PUSH ESI
PUSH EBP // 无Stack Frames时需要保存EBP
XOR EDI,EDI
MOV ESI,EAX
XOR EDX,EDX // EDX = "."的个数
__nextipseg:
MOVZX EAX,[ESI + EDI]
MOV EBP,1 // EBP = 一段数字长度
INC EDI // EDI = 已经检查的字符串长度
SUB EAX,'0'
JB __isfalse // IP段第一个字符不是数字,返回错误
CMP EAX,9
JA __isfalse

__nextchar:
MOVZX ECX,[ESI + EDI] // ECX = 一个字符的无符号扩展,8bit -> 32bit
INC EDI
JECXZ __isnull
CMP EDI,15
JA __isfalse // 字符串长度超过15,返回错误
CMP ECX,'0'
JB __isdot
CMP ECX,'9'
JA __isdot
IMUL AX,10
INC EBP
LEA EAX,[EAX + ECX - '0'] // EAX = 一段IP数值
CMP EBP,3
JA __isfalse // 一段数字长度超过3,返回错误
JMP __nextchar

__isdot:
CMP ECX,'.'
JNE __isfalse // 发现既不是数字也不是'.'的字符,返回错误
INC EDX
CMP EAX,255
JA __isfalse // 一段IP数值超过255,返回错误
CMP EDX,3
JA __isfalse // 发现'.'超过3个,返回错误
JMP __nextipseg

__isnull:
CMP EDX,3
JNE __isfalse // '.'不是3个,返回错误
CMP EAX,255
JA __isfalse // 一段IP数值超过255,返回错误


POP EBP
OR EAX,-1 // return = true
//POP ESI
//POP EDI
JMP __exit
__isfalse:
POP EBP
XOR EAX,EAX // return = false
//POP ESI
//POP EDI
__exit:
}
#pragma warn +8002
}
#pragma warn +8070


Behard 2003-07-07
  • 打赏
  • 举报
回复
Win2000 不支持直接读写端口
随便找一个控件就行了
lcj49997 2003-07-07
  • 打赏
  • 举报
回复
Win2000不能支持汇编,再98下可以的。
换操作系统,或者重新写驱动。
神医CL 2003-07-07
  • 打赏
  • 举报
回复
win2K和win98不一样,不能直接操作底层的东西,我想是dll的问题。
rick1126 2003-07-07
  • 打赏
  • 举报
回复
C语言的outp行吗, 在外面进行数据初始化, 不适用寄存器, 直接利用_outp输出行吗? 调试的机器就64MB内存, 不想装win2k了, 客户的机器没有办法, 设备也就上面一套而已.

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧