H
haha2008haha
Unregistered / Unconfirmed
GUEST, unregistred user!
问题1
有个dll有很多函数,有几个unit都要使用,我想在一个unit中静态调用声明一下,这样其它unit
只要把这个单元包括进就行了,不需要重新声明。可是我在interface中声明总是报错,
在implement中声明别的单元访问不了,怎么办?
2 一个real数组p,一个结构体k,k的成员中有char类型数组,有real类型的
已知p的长度是sizeof(k)+sizeof(real)*256,里面存有数据,数据头既是一个k类型的
其余是256个real类型的数据,怎么把他们分别取出?
下面是我的答案,有问题,各位讨论以下
问题1:
type
char5=array[1..5] of char
real256:array[1..256] of real
pk=^k;
pr=^real;
pInt64=^Int64;
k=record
c:char5;
realc:real;
t:Int64;
end;
p:real256; //存储有数据
ACc;
Arr;
F:char;
F1:Int64;
F2:real;
FTemp:Integer;
AInt64int64;
AC=pchar(@p);
F:=AC^; //k中c[0]
FTemp:=sizeof(real)+5*sizeof(char);
inc(p,FTemp);
F1:=PInt64(p)^; //k中t
FTemp:=sizeof(Int64);
Int(p,FTemp);
F2:=PR(p)^; //k后第一个real类型的数据
第一个问题的,我按张无忌大侠写的,那几个注释的地方写的对吗?
问题2
声明语句:function init(Fchar):Integer;stdcall;external 'jn.dll';
单元语句
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm3 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
//位置1
end;
//位置2
var
Form3: TForm3;
implementation
{$R *.dfm}
//位置3
end.
位置2和3都成功,2时别的单元可以访问,1不行,
[Error] Unit1.pas(33): Field definition not allowed after methods or properties
[Error] Unit1.pas(34): Type expected but 'END' found
[Error] Unit1.pas(33): Unsatisfied forward or external declaration: 'TForm3.INIT'
[Fatal Error] Unit1.pas(6): Could not compile used unit 'Unit3'
同时,要声明一个每个单元都可以访问的全局变量,而不需要引用单元,需要在什么地方声明,全局函数呢,我想在程序运行时初始化一个
全局变量,然后其它模块可以直接调用。
问题3:以前的问题,有大侠已经解决,我担心自己愚顿理解错了,写一下,麻烦看看
vc:
union{
char t[30];
float a;
long k;
char *p;
}u
Delphi:
type
char30=array[1..30] of char;
u=record
case Integer of
0t:char30);
1a:real);
2k:LongInt);
3pchar);
end;
不知这么作对否?
对于Vc里的char类型数组,Delphi里对应的Pchar和array[1..len] of char都行吗?
有个dll有很多函数,有几个unit都要使用,我想在一个unit中静态调用声明一下,这样其它unit
只要把这个单元包括进就行了,不需要重新声明。可是我在interface中声明总是报错,
在implement中声明别的单元访问不了,怎么办?
2 一个real数组p,一个结构体k,k的成员中有char类型数组,有real类型的
已知p的长度是sizeof(k)+sizeof(real)*256,里面存有数据,数据头既是一个k类型的
其余是256个real类型的数据,怎么把他们分别取出?
下面是我的答案,有问题,各位讨论以下
问题1:
type
char5=array[1..5] of char
real256:array[1..256] of real
pk=^k;
pr=^real;
pInt64=^Int64;
k=record
c:char5;
realc:real;
t:Int64;
end;
p:real256; //存储有数据
ACc;
Arr;
F:char;
F1:Int64;
F2:real;
FTemp:Integer;
AInt64int64;
AC=pchar(@p);
F:=AC^; //k中c[0]
FTemp:=sizeof(real)+5*sizeof(char);
inc(p,FTemp);
F1:=PInt64(p)^; //k中t
FTemp:=sizeof(Int64);
Int(p,FTemp);
F2:=PR(p)^; //k后第一个real类型的数据
第一个问题的,我按张无忌大侠写的,那几个注释的地方写的对吗?
问题2
声明语句:function init(Fchar):Integer;stdcall;external 'jn.dll';
单元语句
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm3 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
//位置1
end;
//位置2
var
Form3: TForm3;
implementation
{$R *.dfm}
//位置3
end.
位置2和3都成功,2时别的单元可以访问,1不行,
[Error] Unit1.pas(33): Field definition not allowed after methods or properties
[Error] Unit1.pas(34): Type expected but 'END' found
[Error] Unit1.pas(33): Unsatisfied forward or external declaration: 'TForm3.INIT'
[Fatal Error] Unit1.pas(6): Could not compile used unit 'Unit3'
同时,要声明一个每个单元都可以访问的全局变量,而不需要引用单元,需要在什么地方声明,全局函数呢,我想在程序运行时初始化一个
全局变量,然后其它模块可以直接调用。
问题3:以前的问题,有大侠已经解决,我担心自己愚顿理解错了,写一下,麻烦看看
vc:
union{
char t[30];
float a;
long k;
char *p;
}u
Delphi:
type
char30=array[1..30] of char;
u=record
case Integer of
0t:char30);
1a:real);
2k:LongInt);
3pchar);
end;
不知这么作对否?
对于Vc里的char类型数组,Delphi里对应的Pchar和array[1..len] of char都行吗?