Delphi定义全局变量的问题

zzyhost 2014-11-18 03:19:07
static int a = 2;
int b = a + 2;
这两个都是全局变量,Delphi中如何定义?
...全文
261 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Playmaster 2014-11-20
  • 打赏
  • 举报
回复
全局变量定义要放到所有函数定义的外面: interface .... const a:integer=2; var b:Integer; //b:integer=4; implementation function xxxxx ....
Playmaster 2014-11-20
  • 打赏
  • 举报
回复
2楼不对,编译会报错,因为定义b是初始化只能用常量,编译时变量a的值是不知道的。 应该是: var a:integer=2; b:integer; //或者直接b:integer=2+2; begin b:=a+2;
caonumber 2014-11-20
  • 打赏
  • 举报
回复
就是2楼的方法
zzyhost 2014-11-19
  • 打赏
  • 举报
回复
引用 4 楼 rwlin12345 的回复:
[quote=引用 3 楼 u013402605 的回复:]
[quote=引用 1 楼 wr960204 的回复:]
随便找个函数外的地方
var
a : Integer = 2;
b : Integer = a + 2;

你确定你写的对?[/quote]

看写在什么地方,如果是写在实现部分的全局位置,还真是对的。
如果写在private 或是方法内,那就是错的。


[/quote]
levonsoft 2014-11-19
  • 打赏
  • 举报
回复
引用 3 楼 u013402605 的回复:
[quote=引用 1 楼 wr960204 的回复:] 随便找个函数外的地方 var a : Integer = 2; b : Integer = a + 2;
你确定你写的对?[/quote] 看写在什么地方,如果是写在实现部分的全局位置,还真是对的。 如果写在private 或是方法内,那就是错的。
frtrnr 2014-11-19
  • 打赏
  • 举报
回复
直接写成 const
lyhoo163 2014-11-19
  • 打赏
  • 举报
回复
这是Delphi吸收其它语言的优点,取之而来。
zzyhost 2014-11-18
  • 打赏
  • 举报
回复
引用 1 楼 wr960204 的回复:
随便找个函数外的地方 var a : Integer = 2; b : Integer = a + 2;
你确定你写的对?
lyhoo163 2014-11-18
  • 打赏
  • 举报
回复
全局变量是有范围的: 1、工程范围内,应定义一个单元,专门存放变量;所有的单元uses该单元; 2、单元内全局变量,放在单元的 private中声明的变量,只能在本单元内使用; 3、方法内的全局变量,在方法的Begin之前声明,它只能在本方法内使用,本单元调用其它方法时,它对于其它方法,就是全局变量。
武稀松 2014-11-18
  • 打赏
  • 举报
回复
随便找个函数外的地方 var a : Integer = 2; b : Integer = a + 2;
Delphi中制作DLL •一 Dll的制作一般分为以下几步: 1 在一个DLL工程里写一个过程或函数 2 写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。 二参数传递 1 参数类型最好与window C++的参数类型一致。不要用DELPHI的数据类型。 2 最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windows c++兼容。 3 用stdcall声明后缀。 4 最好大小写敏感。 5 无须用far调用后缀,那只是为了与windows 16位程序兼容。 三 DLL的初始化和退出清理[如果需要初始化和退出清理] 1 DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下: procedure DllEnterPoint(dwReason: DWORD);far;stdcall; dwReason参数有四种类型: DLL_PROCESS_ATTACH:进程进入时 DLL_PROCESS_DETACH进程退出时 DLL_THREAD_ATTACH 线程进入时 DLL_THREAD_DETACH 线程退出时 在初始化部分写: DLLProc := @DLLEnterPoint; DllEnterPoint(DLL_PROCESS_ATTACH); 2 如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil); 3 在退出时一定保证DcomConnection.Connected := False,并且数据集已关闭。否则报地址错。 四全局变量的使用 在widnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份, 但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据 传递,除非你用内存映像文件。 五、其他:调用方式按照标准的Windows调用方式. 六、关于参数传递 •Delphi程序之间调用DLL,如果要用String类型的话,要在引用的单元加上ShareMem 单元。 •如果Delphi写的DLL供其他开发工具使用的话,不要使用String类型,用PAnsiChar类型。 尽量使用标准DLL接口。指的是传递的参数类型及函数返回类型不能是Delphi特有的, 比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不 能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或 动态数组类型,且调用方不是Delphi程序,则基本上会报错。如果调用方是Delphi但调用方或 被调用方没有在工程文件的第一包含单元不是ShareMem,也可能会出错。 七、关于回调Funciton 你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数, 而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都 有回调函数的概念,它实际上是向被调用函数传一个你的函数地址,然后被调用函数向通过你传 入的函数地址来调用你的函数 。 以上是结构化回调,到高级语言Object Pascal、C++中回调函数并没有退出,反而得到延伸与 扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面 向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在 要进行事件触发的地方检查事件过程是否分配,如果分中的就执行事,也就是执行了回调函数。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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