DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: vic_168999
今日帖子: 7
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/19 15:43:42
标题:
大侠来帮忙,给看一下DLL的问题。 浏览:1660
加入我的收藏
楼主: 如下是DELPHI 5开发人员指南中的讲的一个DLL,但我不知他这样写有什么优点,为什么加了一个dllIntf.pas,而且TrecCoin记录为什么要在这里定义?有什么优越性吗?但是当我在程序中调用
function FenTocoins(totFen:word;recCoin:PrecCoin):word;stdcall;
  external 'intf.dll' name 'fenTocoins';
时却出现未声明的数据类型,难道这本书会搞错或是能故弄玄虚吗?

//************************如下是intF.dpr单元*****************************
library intf;

uses
  SysUtils,
  Classes,
  dllIntf;
//function fenToCoins(TotFen:word;recCoin:PrecCoin):word;stdcall;
{$R *.res}
function fentoCoins(TotFen:word;recCoin:PrecCoin):word;stdCall;
begin
  result:=TotFen;
  with recCoin^ do
  begin
    Yuan  :=totFen div 100;
    totFen:=totFen -yuan*100;
    wujiao :=totFen div 50;
    totfen:=totFen -wujiao*50;
    yiJiao:=totFen div 10;
    totFen:=totFen -yiJiao*10;
    wuFen :=totfen div 5;
    totfen:=totfen -wufen*5;
    erFen :=totFen div 2;
    totFen:=totFen -erFen*2;
    yiFen :=totFen;
  end;
end;
exports
  FenToCoins;
end.

//**********如下是dllIntf.pas单元**********************************
unit dllIntf;

interface
type
  PrecCoin=^TrecCoin;//这个为什么不在intF.dpr单元中定义,是不是有什么优点?
  TrecCoin=record
    yuan,
    wuJiao,
    yiJiao,
    wuFen,
    erFen,
    yiFen:word;
  end;
{$IFNDEF INTF}
function FenTocoins(totFen:word;recCoin:PrecCoin):word;stdcall;
{$ENDIF}

implementation
{$IFNDEF INTF}
function FenToCoins;external 'INTF.DLL' name 'FenToCoins';
{$ENDIF}

end.

对了,还有就是这两个单元中哪个是引用单元、哪个是接口单元呢?书上写了但我实在有点分不清啊有点让我看不懂,谢谢!


----------------------------------------------
-
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/19 16:31:09
1楼: 这个这么难吗?
----------------------------------------------
-
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/19 18:46:22
2楼: 明白了,这是通过接口调用DLL
那个pas是接口单元
----------------------------------------------
-
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/19 18:51:35
3楼: 那这样用什么优点呢
----------------------------------------------
-
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/2/19 22:13:26
4楼: 优点就是当Dll中这个结构改变了的话
Exe就不用再修改这个结构
直接用那个.pas文件就可以
避免重复劳动嘛
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 7:41:29
5楼: good morning,sephil,your hard disk were OK already?
那么function FenTocoins(totFen:word;recCoin:PrecCoin):word;stdcall;为什么要在接口单元中声明呢?为什么不在dpr中声明呢,因为那个函数体是在dpr中啊?
还有就是它加上个条件编绎指令的原因是什么呢?
OK THANKS!
----------------------------------------------
-
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/2/20 16:27:54
6楼: {$IFNDEF INTF}
function FenTocoins(totFen:word;recCoin:PrecCoin):word;stdcall;
{$ENDIF}

implementation
{$IFNDEF INTF}
function FenToCoins;external 'INTF.DLL' name 'FenToCoins';
{$ENDIF}

这些内容实际是对Dll中函数的引用

看见 {$IFNDEF...}这些了么
这些是预编译指示符
在写Dll的时候只要定义一个 {$DEFINE INTF}
那个Dll工程中{IFNDEF}中的这些内容Delphi不会处理的
而Exe中没有这个定义,那么对于Delphi来说这些内容就是可见的

好好看书吧
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 17:58:20
7楼: 谢了,sephil兄,你可真够强啊,我可服了你了,真的

原来
{$IFNDEF INTF}
function FenTocoins(totFen:word;recCoin:PrecCoin):word;stdcall;
{$ENDIF} 
不是为dpr定义函数啊,谢谢!
----------------------------------------------
-
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/2/20 18:01:53
8楼: :)
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2004/2/20 18:05:58
9楼: sephil 大哥是这里的老大哦!当年人家是CSDN上的高手一份哦!
----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2004/2/20 18:08:50
10楼: 我不是老大
也不是高手
..........
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 18:25:29
11楼: 是高手,没错的!:)
----------------------------------------------
-
作者:
男 scan666 (scan666) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 19:15:20
12楼: 高手呀!!!!!!!!
灌水!
     在2ccc攒够  2000分!!!!!
----------------------------------------------
按此在新窗口浏览图片
作者:
男 restboy (枫☆白水煮大虾) ★☆☆☆☆ -
盒子活跃会员
2004/2/20 22:29:25
13楼: 我不太喜欢CSDN,功利性太强。。。很少有象这里能热情帮助别人的人。
dfw去过几次但没什么印象。
----------------------------------------------
夫君子之行,静以修身,俭以养德.非澹泊无以明志, 
非宁静无以致远.夫学须静也,才须学也,非学无以广才,
非志无以成学,淫漫则不能励精,险躁则不能治性,年与时驰, 
意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!
作者:
男 zxdcj (月下舞者) ★☆☆☆☆ -
盒子活跃会员
2004/2/21 7:55:44
14楼: 大富翁和DELPHI盒子好像是一家的,只不过是一国两制而以,这样更适合国情!
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行996.0938毫秒 RSS