游戏开发论坛

 找回密码
 立即注册
搜索
查看: 26573|回复: 43

[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

 关闭 [复制链接]

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
发表于 2006-1-10 01:53:00 | 显示全部楼层 |阅读模式
我前几天用MASM写了一个DLL,效率绝对一流!MASM是汇编语言不用我说了吧?放上来给大家用用吧,大家可以把WIN32API扔了。VB的申明模式我已在我的BLOG写的很详细了。而Utils.dll只有4k(如果没加版权说明,DLL只有3K,酷吗?^_^)。

里面的函数主要实现:

1、位操作(左移、右移仅这两个,需要增加者请留言);
2、进制转换(二进制(01的字串)<->十进制(32位整型),十六进制(0~F的字串)<->十进制(32位整型));
3、串操作(获取长度,拷贝,搜索位置等,常用的是获取长度,比lstrlen快N倍);
4、内存操作(拷贝,填充、置零。这些我想都可代替RtlMoveMemory、RtlFillMemory、RtlZeroMemory);
5、连续的十六进制构成的串转换成ASCII文本(这个功能超强!)。

VB的声明及汇编源码:http://dsdm.bokee.com/4104106.html
DLL下载:http://dsdm.bokee.com/inc/Utils.dll
如果大家有什么疑问,可留言给我。

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 01:53:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

还有忘了说,这些函数都有检查指针参数的。对了ByRef大家应该知道吧!这就是指针!例如我想大家都知道:VB的字串变量其实就是指针、数组变量名也是指针(一般用动态数组)、还有结构变量名…… 一般在DLL函数的ByRef参数用法都是直接使用的,不须再加前缀ByVal,因为他们已经是指针了,唯独string字符串例外:须加ByVal。

例如Bin2Dec函数的声明模式如下:

' numeric converter
Declare Function Bin2Dec Lib "Utils.dll" _
   (ByRef pBin As Any) As Long

大家在调用时可这样用:
dim cDec as long ' 返回值  
dim pBin as string
pBin = String(40, chr(0)) '给字串指针分配40个字节的堆栈空间
nDec= Bin2Dec(byval "10011001")  '结果为153
msgbox ndec

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 01:53:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

最后一个函数我也想再写一下说明:

这是在MASM中的声明模式:
HexToString   proto WORD, :DWORD

VB应该这样:
declare function HexToString lib "Utils.dll" _
   (byref pszString as any, byref pszHex as any) as long

用法:

dim pszString as string
pszString = string(256, chr(0)) ' 为pszString指针分配256个字节
call HexToString(byval pszString, byval "6D7367626F78206E646563")
msgbox pszString  '哈哈,结果为“msgbox ndec”

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 01:56:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

效率我就不想再提了,除了机器语言外,没有任何语言快过于汇编语言的,而且我的算法都是比较优的。

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2006-1-10 02:03:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

不错。申请一个汇编版的斑竹来做做~~

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 02:06:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

偶只是略懂一点汇编指令而已,版主可不敢做。...

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 04:44:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

对了,还有一个函数是忘了加声明的,就是创建CRC32:

declare function CreateCrc32Table lib "Utils.dll" _
    (byref pArr as any) as long

用法:

dim pArr(255) as long

call  CreateCrc32Table(pArr(0))

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 05:32:00 | 显示全部楼层

Re: [原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

算了,偶的BLOG有时会无法访问,还是在这里传一个吧!

sf_20061105327.rar

1.6 KB, 下载次数:

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 05:42:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

另外,我也有一个快速处理BITMAP位图的汇编代码。主要技术源于堆管理函数、显示器DC、DIB、BITMAP文件头、内存复制。

函数功能:

1、灰度级别;
2、透空(将指定色转换成指定色。比如说,将某一种颜色转换成背景色,那不就是透空了嘛!);
3、Disable效果。

函数声明方式:

declare function MakeBitmapEx lib "Utils.dll" _
     (byval hBitmap as long,  _
      byval clrMask as long, _
      byval clrBackground as long, _
      byval nGrayValue as long, _
      byval bDisabled as long) as long

用法:
1、先用LoadImage函数从*.res或是磁盘中加载一位图,返回一个HBITMAP;
2、然后调用本函数,本函数将返回一个处理过的HBITMAP;
3、最后选进一个DC中,就可完成处理后的图片再现。


目前尚未添加进Utils.dll,明天加吧,我要睡了。

7

主题

229

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
QQ
 楼主| 发表于 2006-1-10 05:48:00 | 显示全部楼层

Re:[原创DLL]前几天我用MASM编写的Utils.dll拿出来给大家用用

目前DLL共有下列函数:

文件名: D:\Utils.dll
------------------------------------------------
导出表所处的节:.rdata
------------------------------------------------
原始文件名          Utils.dll
nBase               00000001
NumberOfFunctions   00000012
NumberOfNames       00000012
AddressOfFunctions  00002048
AddressOfNames      00002090
AddressOfNameOrd    000020D8
------------------------------------------------
导出序号  虚拟地址  导出函数名称
------------------------------------------------
00000001  00001028  Bin2Dec
00000002  00001351  CreateCrc32Table
00000003  00001058  Dec2Bin
00000004  00001095  Dec2Hex
00000005  000010C3  Hex2Dec
00000006  00001382  HexToString
00000007  000012D3  MMemCopy
00000008  000012FE  MMemFill
00000009  000012AD  MMemZero
0000000A  000011B7  MStrCat
0000000B  0000117F  MStrCopy
0000000C  0000113D  MStrLen2
0000000D  00001101  MStrLen
0000000E  00001282  MStrLower
0000000F  000011FA  MStrPos
00000010  00001257  MStrUpper
00000011  0000100A  MoveBitL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 11:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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