主页
Top.Mail.Ru Yandeks.Metrika
论坛:“WinAPI”;
当前存档:2002.04.25;
下载:[xml.tar.bz2];

向下

如何创建动态数组? 找到类似的分支


BVS   (2002-02-06 17:15) [0]

嘿。

如何仅使用API​​工具创建动态数组。
以及如何添加新元素。

谢谢。



Suntechnic   (2002-02-06 17:54) [1]

动态阵列是什么? 什么样的工具这样的API?



BVS   (2002-02-06 21:38) [2]

LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry [n]

n - 事先不知道。



Фэ   (2002-02-07 00:20) [3]

一般API热潮..
关于德尔福的网站。



Tosov   (2002-02-07 00:50) [4]

BVS
如何使用API​​创建变量?
cbInt:Integer;



Digitman   (2002-02-07 10:49) [5]

LPINTERNET_CACHE_ENTRY_INFO - 此原型在何处以及如何声明?



Фэ   (2002-02-07 11:26) [6]

wininet.pas

function RetrieveUrlCacheEntryFileA(lpszUrlName:PAnsiChar;
var lpCacheEntryInfo:TInternetCacheEntryInfo;
var lpdwCacheEntryInfoBufferSize:DWORD;
dwReserved:DWORD):BOOL; STDCALL;



VuDZ   (2002-02-07 11:29) [7]

LPINTERNET_CACHE_ENTRY_INFO - 指向_INTERNET_CACHE_ENTRY_INFO的指针 - SDK你应该偶尔看看它....

FEH
一般API热潮..
关于德尔福的网站。

你会在没有API的情况下制作很多东西吗?

BVS
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry [n]
在C上,这可以通过不同的方式完成:
1.
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = new _INTERNET_CACHE_ENTRY_INFO [n];

2。 BYTE * lpCEntry = new BYTE [sizeof(_INTERNET_CACHE_ENTRY_INFO)* n];

意思是否明确?
只需选择以字节为单位的结构,其大小等于_INTERNET_CACHE_ENTRY_INFO * n倍的大小



Фэ   (2002-02-07 12:09) [8]

所以写信给C.
或者给出等效的代码。

在那里有动态数组。
ii:TInternetCacheEntryInfo数组;
..
SetLenght(ii,20);



Digitman   (2002-02-07 12:16) [9]

> VuDZ
这就是我正在看的 - 你已经研究了整个SDK上下,因为Win32API已经发现了“动态数组”)..并且在结构化内存的分配机制中你“漂浮”了

你有结构的大小,有一个指向内存块的变量指针,WinAPI调用应该复制N个这样的结构块,那有什么关系呢? 以任何可用的方式分配大小为N * SizeOf(结构)的内存并将其作为参数传递!



VuDZ   (2002-02-07 12:25) [10]

1.
>这就是我正在看的 - 你已经研究过SDK,
>如果找到Win32API中的“动态数组”
你在哪里和我见面的?
我的win32API在哪里?

2.
> ..并在分配机制中构建
>记忆“漂浮”)
然后呢?

3.
>你有结构的大小,有一个指针变量
>一个内存块,WinAPI调用应该从N复制一个块
>这样的结构,那有什么关系? 分配内存大小
> N * SizeOf(结构)以任何可能的方式转移它
>作为参数!
我写了什么?

我不明白你......



Pete   (2002-02-07 12:55) [11]

unit Unit1;


interface


uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;


type
ElementType = Integer;


const
MaxArraySize = (65520 div SizeOf(ElementType));
{ в 16-битной среде }


type
{ Создаем тип массива. Убедитесь в том, что вы установили
максимальный диапазон, который вам, вероятно, может понадобиться. }
TDynamicArray = array[1..MaxArraySize] of ElementType;
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;
{ Создаем переменную типа указатель на ваш тип массива. }
P: ^TDynamicArray;


const
{ Это типизированные константы. В действительности они
являются статическими переменными, инициализирующимися
во время выполнения указанными в исходном коде значениями.
Это означает, что вы можете использовать типизированные
константы точно также, как и любые другие переменные.
Удобство заключается в автоматически инициализируемой величине. }
DynamicArraySizeNeeded: Integer = 10;


implementation


{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);
begin
{ Распределяем память для нашего массива. Будь внимательны
и распределяйте размер, в точности необходимый для размещения нового массива.
Если вы попытаетесь записать элемент, выходящий за допустимый диапазон,
компилятор не ругнется, но объект исключения вам обеспечен. }
DynamicArraySizeNeeded := 500;
P := AllocMem(DynamicArraySizeNeeded * SizeOf(Integer));
{ Как присвоить значение пятому элементу массива. }
P^[5] := 68;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
{ Вывод данных. }
Button1.Caption := IntToStr(P^[5]);
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
{ Освобождаем распределенную для массива память. }
FreeMem(P, DynamicArraySizeNeeded * SizeOf(Integer));
end;


end.


不是我的例子,但我用它来创建动态数组。 很简单。

或者喜欢 GetMem и FreeMem



Digitman   (2002-02-07 18:27) [12]

> VuDZ
p1。 virt.pamyati的发行“管理”Win32。 你想创建一个数组,对吧? 所以 - 请求内存,对吧? 所以在最低级别,是Win32API,对吗?

p2。 尽管您自己无法弄清楚您感兴趣的电话会返回N个特定类型的连续结构。 问题是在哪里返回? 在这种情况下,应用程序应该管理返回的结构化数组的内存分配; 来自OS的确切地请求这样的存储块,其足以容纳给定大小的N个连续结构(读取,结构_字节的大小为N的存储块),并将指向该块的类型指针作为参数调用API函数。

p3。 <Pete>已经向您解释了一切



VuDZ   (2002-02-07 19:36) [13]

好的,我已经有条件了,我会说几句话:
p1。 virt.pamyati的发行“管理”Win32。 你想创建一个数组,对吧? 所以 - 请求内存,对吧? 所以在最低级别,是Win32API,对吗?
我给出的那个例子(更确切地说,2)引用了STL库函数来分配内存,而不管变量的类型如何,但是堆“工作 - 如果有需要的话 - VC98 \ CRT \ SRC \ MALLOC.C - 一切都写得很好。 ..
但我不明白你想说什么
我想知道如何在Windows下没有win32api的情况下分配内存? 但如果你有自己的内存管理器,那么他必须从某个地方获得指向某个内存区域的指针
动态数组与否是不重要的,只是在第一种情况下需要重新分配内存GlobalReAlloc() - 例如,在第二种情况下 - 仅在使用它结束时释放

p2。 尽管您自己无法弄清楚您感兴趣的电话会返回N个特定类型的连续结构。 问题是在哪里返回? 在这种情况下,应用程序应该管理返回的结构化数组的内存分配; 来自OS的确切地请求这样的存储块,其足以容纳给定大小的N个连续结构(读取,结构_字节的大小为N的存储块),并将指向该块的类型指针作为参数调用API函数。
首先,不需要撒谎,其次,它已经开始类似于关于北约飞行员的笑话 - 无论愿景是-20还是旧地图:
只需选择以字节为单位的结构,其大小等于_INTERNET_CACHE_ENTRY_INFO * n倍的大小
在我看来,我说同样的事情 - 或者我们有不同的编码?

p3。 <Pete>已经向您解释了一切
和?
我知道你很难理解你,特别是没有颜色选择......

PS Digitman,我不明白你想用你的帖子告诉我什么? 或者这种想要告诉每个人什么类型的愿望 - 无论他写什么,这个家伙都错了。 但我的观点是正确的。
有话要说吗?



Suntechnic   (2002-02-08 00:25) [14]

火焰很好地从手指上吮吸:):...

> VuDZ©
我会在你的地方举行种马。 我本人可以在这里阅读一篇关于在C ++中使用动态内存的讲座,但论坛仍然在Delphi上,所以这绝对不合适。 嗯,谁在乎这里读这一行?
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = new _INTERNET_CACHE_ENTRY_INFO [n];

这零的好处....

>数字人©
说实话,我也不太明白你试图解释什么是VuDZ©...从C ++的角度来看,它一般是写的(我说“一般”,因为它根本不清楚作者需要什么。)足够准确,BVS条目(06.02.02 21:38)LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry [n]意味着作者需要一个指向_INTERNET_CACHE_ENTRY_INFO的动态数组指针,而不是这些结构的动态数组),但另一方面,这与Delphi有什么关系呢?

>所有
一般来说,问题的最正确答案是Tosov©(07.02.02 00:50):)




Digitman   (2002-02-08 08:40) [15]

> VuDZ
我道歉 我的所有言论都不是针对你的,而是针对作者的(NIKI与我混淆)。 我对你的关于某种SDK的短语感到困惑,“你需要看看它应该至少是偶尔的。”

停止无意义的火焰?




VuDZ   (2002-02-08 10:09) [16]

是的



AndrewBee   (2002-02-09 08:37) [17]

你用动态数组折磨:o(((
TList类专门创建了这样的问题来解决!



Evgeny   (2002-02-09 08:48) [18]

> AndrewBee
你有没有看过论坛帖子? 对于那些无法阅读的人。 这个论坛是WinAPI!



AndrewBee   (2002-02-09 08:53) [19]

是的我知道:o)
究竟难以塑造什么?
在VCL中有一个专门创建的(非常深思熟虑的)类来解决动态数组的问题。



Milz   (2002-02-11 10:23) [20]

我同意AndrewBee,但如果你真的想要,那么你可以......

创建一个描述Pete的数组,改变维度:

pTemp: ^TDynamicArray;

getMem (pTemp, sizeof(ElementType ) * newnumelements);
memcopy (pTemp, pMyArray, sizeof(ElementType )*n);
{n - количество элементов в pMyArray}
freeMem (pMyArray, sizeof(ElementType )*n);
pMyArray := pTemp;


> BVS
如果您需要更多详细信息,请写



Иван Шихалев   (2002-02-11 20:38) [21]

事实上,如果使用D400将动态数组和SetLength程序引入到语言中,那么难以雕刻和4千字节VCL链接是什么?



Фэ   (2002-02-12 02:34) [22]

另外,我不明白 - 为什么人们在忙?

Dir:TSearchRec数组;
..
SetLength(Dir,20);
..
SetLength(Dir,Length(Dir)+ 5);
..
Dir [7] .Name; //访问正文

PS最重要的是 - 他们都知道。 不,他们达成了混战。
虽然,如果原则问题..



Эдуард   (2002-02-20 07:32) [23]

事实上,这样的shnyaga Dir: arra or Чего-нибудь 允许你只放置128元素(我在某处阅读),根据我的经验尝试过,结果只有126 =))



MBo   (2002-02-20 07:43) [24]

>只有128元素(在某处读取
意思是,不是那些读过的书,也没有那么试过



SergeyDon   (2002-02-20 09:30) [25]

同意mvo
我在50到10000的masivi中做的和Fe一样。红色的一切都很好。 和精英们:
记录
a:整数;
b:string [5];
结束{记录}
所有的苍蝇无关!



Страницы: 1 整个分支

论坛:“WinAPI”;
当前存档:2002.04.25;
下载:[xml.tar.bz2];

楼上





内存:0.65 MB
时间:0.04 c
1-80986
kimblch
2002-04-10 02:29
2002.04.25
关于OLE-Automation(早期绑定)的问题


14-81075
FELLINI
2002-03-21 06:52
2002.04.25
如何最小化桌面


1-80943
谢苗
2002-04-11 17:51
2002.04.25
系统托盘


1-80975
SB.John
2002-04-12 12:54
2002.04.25
如何清洁画布


3-80829
斯里
2002-04-05 07:21
2002.04.25
Delphi 6中的DDP文件是什么?





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法语
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 淡米尔文 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский