社区
Delphi
帖子详情
请教WINDOWS的CARDS.DLL的用法
wyj1
2000-01-04 09:08:00
听ZDG大哥说该库很好用,尢其是编制扑克牌游戏时,但从未用过,不知哪里可以找到帮助文档?或者直接指点一二?谢了
...全文
530
6
打赏
收藏
请教WINDOWS的CARDS.DLL的用法
听ZDG大哥说该库很好用,尢其是编制扑克牌游戏时,但从未用过,不知哪里可以找到帮助文档?或者直接指点一二?谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zdg
2000-01-05
打赏
举报
回复
蒋涛是大陆人, 上面肯定是从哪儿搬来的文章...
jiangtao
2000-01-05
打赏
举报
回复
cards.dll就是一个纯资源的DLL,没有函数调用,
图像显示用Bitblt速度最快!
wyj
2000-01-04
打赏
举报
回复
谢谢您江大侠:关键是我想知道这个DLL中有哪几个函数,它们各且的功能的用法。麻烦您不吝赐教,十分感激!
jiangtao
2000-01-04
打赏
举报
回复
函数有显式调用和隐含调用两种,
这个问题你应该去看书!!!
马上想得到的使用说明有以下几点:
1. 所需动态连结的 DLL 须置放在与执行档同一目录或Windows System 目录
2. 确认 DLL export 出来的函式的原型, 以目前的情况而言, 通常只拿得到 C
语言的函数原型,这时要注意 C 与 object Pascal 相对应的型别, 如果需要, 在
interface 一节定义所需的资料类别
3. 在 implementation 节中宣告欲使用的函式, 语法大致如下:
procedure ProcName(Argu...); far; external 'DLL档名';
index n;
function FuncName(Argr...): DataType; far;
//注意应该用stdcall for Win95 ...jt...
external 'DLL档名'; index n;
宣告时, index n 如果不写, 便是参考资料中所谓 import by name 的方式, 此
时, 由於需要从 DLL 的 name table 中找出这个函式, 因此, 连结执行速度比
import by ordinal稍慢一些, 此外, 还有一种 by new name, 由於我没用过, 您可
以查一参考资料, 大意是可以 import 後改用另一个程式命名呼叫这个函式
4. 然後, 呼叫与使用就与一般的Delphi 没有两样
5. 上述是直接写到呼叫DLL函式的程式单元中, 此外,也可以将DLL的呼叫宣告集
中到一个程式单元(Import unit), Delphi 内附的 WinTypes, WinProcs是一个例子,
您可以参考一下,同时观察一下 C 与 Pascal 互相对应的资料型态
6. 除了上述的 static import 的方式, 另外有一种 dynamic import 的写法,
先宣告一个程序类型(procedural-type),程式执行时, 以 LoadLibrary() API Load
进来後, 再以 GetProcAddress() API 取得函式的位址的方式来连结呼叫, 在Object
Pascal Language Guide P.132-133 有一个例子, 您可以参考看看
如果要举个例子, 以下是从我以前的程式节录出来的片断:
(* for CWindows 3.1 *)
unit Ime31;
interface
uses
SysUtils, WinTypes, WinProcs, Dialogs;
type
(* 必要的资料型态宣告 *)
tDateNTime = record
wYear, wMonth, wDay: word;
wHour, wMin, wSec: word;
end;
TImePro = record
hWndIme: HWnd; { IME handle }
dtInstDate: tDateNTime; { Date and time of installation }
wVersion: word; { the version of IME }
szDescription: array[0..49] of byte; { Description of IME module}
szName: array[0..79] of byte; { Module name of the IME }
szOptions: array[0..29] of byte; { options of IME at startup}
fEnable: boolean; { IME status; True=activated,False=deactivated }
end;
pTImePro = ^TImePro;
function SetIme(const sImeFileName: string): boolean; far;
implementation
(* begin 呼叫 winnls.dll export 函数的宣告 *)
function ImpSetIme(hWndIme: HWND; lpImePro: pTImePro): boolean;far; external 'winnls.dll';
(* end 呼叫 winnls.dll export 函数的宣告 *)
(* -------------------------------------------------- *)
(* SetIme(const sImeFileName: string): boolean;
(* ======
(* 切换到某一特定的输入法
(*
(* 传入引数:
(* sImeFileName: 输入法 IME 档名, 例: phon.ime;
(* 空字串: 英数输入法
(*
(* 传回值:
(* True: 切换成功
(* False: 失败
(* -------------------------------------------------- *)
function SetIme(const sImeFileName: string): boolean;
var
pImePro: pTImePro;
begin
Result := False;
if MaxAvail < SizeOf(TImePro) then
begin
MessageDlg('记忆体不足', mtWarning, [mbOk], 0);
Exit;
end
else
begin
New(pImePro);
try
if sImeFileName = '' then (* 空字串, 还原到英数输入法 *)
pImePro^.szName[0] := 0
else
StrPCopy(@pImePro^.szName, sImeFileName);
Result := ImpSetIme(0, pImePro); (* 呼叫 ImpSetIme *)
finally
Dispose(pImePro);
end; { of try }
end;
end; { of SetIme }
end.
wyj
2000-01-04
打赏
举报
回复
JiangTao:您好,谢谢您!从DLL中取资源我已经会了,那么又怎么使用其中的函数呢?哪儿有例子?
jiangtao
2000-01-04
打赏
举报
回复
Use 资源编辑器打开Cards.dll得到各张卡片的ID
var
hLib:HINSTANCE;
hBmp:TBitMap;
hLib:=LoadLibrary('qumueng.dll');
hBmp:=TBitMap.Create;
hBmp.LoadFromResourceID((hlib,cardID);
hBmp.Free;
FreeLibaray;
Jiangsheng的CSDN Digest (Dec 2005)
CSDN 讨论总结系列:Jiangsheng的CSDN Digest (Dec 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/24/561501.aspx) Jiangsheng的CSDN Digest (Oct 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/27/56327
Oracle安装的一些问题收集[转]
在安装过程中出现的一些问题的解决办法。值得收藏与学习。比如在安装的时候如果有中文的路径则会出现类似这样的提示:加载数据库时出错:areasQueries Oracle的系统要求 企业版:CPU 最低PENTIUM 200M 推荐 PENTIUMIII 1G以上 内存 最低128M 推荐 512M 硬盘空间 系统盘140M 安装盘4.5G(FAT32)或2.75G(NTFS) 标准...
NHibernate Step by Step (一) Hello,NHibernate!
NHibernate Step by Step (一) Hello,NHibernate! NHibernate Step by Step (一) Hello,NHibernate! 好了,今天我们正式开始NHibernate的历程,在第一次的练习中,我将尽量详细地讲解环境的配置,以后将不再详细解释。基本的软件环境如下:1.NHibernate www.nhibernate.org
高负载高并发网站架构分析
由于自己正在做一个高性能大用户量的论坛程序,对高性能高并发服务器架构比较感兴趣,于是在网上收集了不少这方面的资料和大家分享。希望能和大家交流 msn: defender_ios@hotmail.com ——————————————————————————————————————— 初创网站与开源软件 6 谈谈大型高负载网站服务器的优化心得! 8 Lighttpd+S
基于Java的qq截图工具设计开发(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的qq截图工具 摘要 当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出。 本软件采用Java语言进行模拟qq截图功能,获取屏幕方式灵活,可以获取指定的屏幕,并且可以对获取到的截图进行存储,编辑(添加文字)等操作,对这些操作设置了自定义热键。该软件主要有捕获光标功能,可以指定截取屏幕的区域。软件具有捕捉光标,可以随着鼠标的移...
Delphi
5,386
社区成员
262,729
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章