再次复活的教程,继续我们的旅程,利用DLL完成RM无法单独完成的任务!
教程第三弹:Microsoft Visual C++ 6.0 制作 DLL ~
以前我们总是利用系统自带的WIN32.API.DLL来完成各种功能,可以毕竟是系统里有的东西,如果系统没有提供的功能,我们不是就束手无策了?
所以,今天我们就要学习怎样用VC++6.0来制作自己的DLL!
当然,这是针对拥有VC++使用基础的人来写的教程,具体不会C++的只有自己学习先了~ …………
首先我们要了解VC++6.0(后面就简称VC了)如何建立DLL工程。
点击文件->新建(Ctrl+N),打开新建窗口,选择如下选项,并且填入必要的内容,发张图片:
选择A simple DLL project(简单的DLL框架),然后点击Finish(完成)。 (注:如果有兴趣的话,您可以选择A DLL that exports some symbols,就是一个输出几个函数的DLL,里面输出了简单的函数,可以参考看看)
最后确定之后我们就建立了一个简单的DLL工程了,在这里写的程序和平时使用VC写程序是差不多的。
这个工程里有几个文件:stdafx.h、stdafx.cpp,这是预编译头文件,不用去理会它。还有一个cpp文件,名字和工程名应该是相同的,我们写的程序大都写在这里,最后导出的函数都是要在这里写的。
写两个示例的函数:
// 不能导出的函数 int FunNoExt() {
}
// 可以导出的函数 extern int __stdcall FunExt() {
}
这里的__stdcall好像是表明了函数调用的方式,反正是我们不用去管它的东西……
然后就是函数的导出,我们在这里利用DEF文件来执行这个功能。 在工程中添加一个文本文件,扩展名改为def,然后在这个def文件里写DLL导出函数,格式如下:
LIBRARY 队列 //工程名 DESCRIPTION //在这里添加说明 EXPORTS //这里就是写导出函数名字的 FunExt @1 //函数名,@后面的可以不写。
这就是def的格式,LIBRARY后面指定了导出名,可不写,不写的话默认就是文件名,一般这个和文件名就是应该相同。EXPORTS后面的内容指定了要导出的函数,后面的@1表明了导出顺序,这个没什么关系可以随便定义一个数字,也可以不写。
写入了具体的内容就可以编译了,在这里随便写了一个位操作的代码,就拿过来编译成DLL了,具体参考范例工程里的VC工程。
编译的时候注意要在编译选项里设置编译方式为Release方式,不然有的时候其它机器会无法调用,而且效率会降低~
这个DLL具体导出两个函数: long MoveLeft(long x,int mov) # 二进制数x左移mov位 long MoveRight(long x,int mov) # 右移
使用实例: 首先把编译好的DLL拷贝到RM工程相同路径! 在所有脚本快之前添加以下内容,就会输出“4”,“4”两次返回值~ # 扩展 Integer 类的功能~ class Integer < Numeric # 二进制左移 def move_l(mov) dll1 = Win32API.new('Bin', 'MoveLeft', 'li', 'l') dll1.call(self,mov) end # 二进制左移 def move_r(mov) dll2 = Win32API.new('Bin', 'MoveRight', 'li', 'l') dll2.call(self,mov) end end p 16.move_r(2) p 2.move_l(1)
教程,截图,以及VC工程及DLL下载: http://bbs.66rpg.com/UP_PIC/200703/RMDLL示例.rar |