关于语言的一些问题?(50分)

  • 主题发起人 主题发起人 LitterTiger
  • 开始时间 开始时间
L

LitterTiger

Unregistered / Unconfirmed
GUEST, unregistred user!
1,delphi里很多api有声明(用external),但是没有相关的参数或常量生命,而
自带的win sdk帮助是以c格式写的,并且常量也不是用数字而是用常量名表示的,
请问这是delphi安排的缺陷,还是我还有东西没发现呢?
2,有的时候希望把const定义的常量放到类里面去,因为这样便于管理,
可是opascal怎么没有这方面的机制?
3,delphi里面不知道静态类怎么定义?
4,在一个函数中用到一个api,而在别的地方没用到,如果希望他的作用域是本函数,
请问怎么实现?
5,为什么不像string或interface一样实现垃圾收集功能?interface,如果借鉴一下java
可能还能更好一点,讨厌那么长的guid.
 
1. 你是在Windows.pas中看到的API申明吧? 在Windows.pas中申明一个API分成两部份,
一部份是在interface节,如:
{$EXTERNALSYM FindWindow}
function FindWindow(lpClassName, lpWindowName: PChar): HWND
stdcall;
另一部份是在implementation节,如:
function FindWindow
external user32 name 'FindWindowA';
你只发现了后者:)
 
多谢skyweb!

2. ...把const定义的常量放到类里面去...
很遗憾,Delphi目前尚不支持常量类成员。我一般一个Unit放一个或几个紧密相关的类,
在Interface部分用Const进行常量定义,这样类的内部和外部都可以引用,并且管理也非常
方便。
 
1,delphi里很多api有声明(用external),但是没有相关的参数或常量生命,而
自带的win sdk帮助是以c格式写的,并且常量也不是用数字而是用常量名表示的,
请问这是delphi安排的缺陷,还是我还有东西没发现呢?
答:绝大多数的API声明和参数类型,常量声明Delphi都已经为你声明好了。不信看看
Windows.pas的内容。
即使遇到新的没有来得及声明的API,也可以自己声明。
如果你比较懒惰的话,可以去下载一个C声明转Pascal声明的工具。

2,有的时候希望把const定义的常量放到类里面去,因为这样便于管理,
可是opascal怎么没有这方面的机制?
答:有必要么?不要糊涂了。那样的话会乱套的。不行你再多多考虑一下,原因是很浅显的。

3,delphi里面不知道静态类怎么定义?
答:
好像是不支持。
4,在一个函数中用到一个api,而在别的地方没用到,如果希望他的作用域是本函数,
请问怎么实现?
答:
不可能。除非你用动态装载DLL技术。或者是函数指针。
type PVFN = Function (para : Integer) : Integer;
var
fn : PVFN

//也可以直接在此处定义,如:fn : function (para:Integer):Integer;
hm : HMODULE;
begin
hm := LoadLibrary('test.dll');
fn := GetProcAddress(hm, 'Function1');
fn(2);
FreeLibrary(hm);
end;
5,为什么不像string或interface一样实现垃圾收集功能?interface,如果借鉴一下java
可能还能更好一点,讨厌那么长的guid.
答:
可是COM是微软制定的。Borland只是在尊序标准而已。VC,VB利用COM时不也都有GUID吗?
 
我说的是通用的接口,不是专指com的.

2,我想应该那么做,如果不支持静态成员,就没办法了,看看java

多谢各位,我再看看!
 
Delphi的interface就是专为解决COM问题而设立的。
 
sorry,我是没有把windows.pas看清楚.
我明白interface最初是这个目的,但拉出来单独使用,也可以.
还有重载非得要个overload,是不是添足呀?
还有没有静态类总是很不舒服,很多东西都不得不放在外面.
 
怎么没有人指点一下小弟呢?
 
后退
顶部