Casa
Top.Mail.Ru Yandeks.Metrika
Fórum: "Agarrar";
Arquivo atual: 2004.12.12;
Download: [xml.tar.bz2];

Para baixo

Um exemplo interessante de código em Tayksera e Pacheco Encontre agências semelhantes


Piter ©   (2004-11-23 22:19) [0]

Eu não percebi isso antes, mas depois percebi. "Delphi 6 for Developers", edição russa, p. 290:

GlobalData ^ .S: = "ShareLib"; GlobalData ^ .I: = 1; se GlobalData = nil então começar CloseHandle (MapHandle); RaiseWin32Error; fim;

Tudo está exatamente na ordem que eu escrevi. Talvez, também, escreva "pelo que não gosto de Teixer e Pacheco" seguindo o exemplo de algumas pessoas respeitadas? :)

PS Eu acho que você não deveria culpar uma tradução analfabeta ... Os tradutores mudaram o código?



app ©   (2004-11-23 22:29) [1]

Aqui os tradutores não têm nada a ver com isso. Bem, escreva, mas apenas divida em duas partes, erros no código e erros conceituais.



Гаврила ©   (2004-11-23 22:31) [2]

Acontece.
Eu encontrei uma obra-prima em Tenzer:
MyObject: = TMyObject.Create;
se MyObject = nil então .....



Agent13 ©   (2004-11-23 22:36) [3]

Sim, os tradutores não têm nada a ver com isso. Na versão em inglês na p. 281 é exatamente o mesmo código :)



Игорь Шевченко ©   (2004-11-23 22:36) [4]

Piter © (23.11.04 22: 19)

Diga a seção e capítulo (por tópico, não por número), eu vou olhar para D5, na ponta dos meus dedos



Anatoly Podgoretsky ©   (2004-11-23 22:39) [5]

6 capítulo, você não pode verificar Eu verifiquei o código no CD, isso simplesmente não é um exemplo depurado, é claro que essas duas linhas devem ser após o final;



Anatoly Podgoretsky ©   (2004-11-23 22:44) [6]

Igor Shevchenko © (23.11.04 22: 36) [4]
No D5, este capítulo 9 é o mesmo lá. ShareLib Exemplo



Юрий Зотов ©   (2004-11-23 23:36) [7]

Se o aplicativo for multiencadeado e a variável GlobalData estiver disponível para vários encadeamentos, tudo estará bem. Como após a execução do operador GlobalData ^ .I: = 1, nada impede que outro thread destrua de forma assíncrona os dados no endereço GlobalData e limpe o próprio ponteiro.



Piter ©   (2004-11-23 23:59) [8]

Gavrila © (23.11.04 22: 31) [2]
Eu encontrei uma obra-prima em Tenzer:
MyObject: = TMyObject.Create;
se MyObject = nil então .....


e o que está errado aqui? Ou depois de algo que se segue a um MyObject?

Yuri Zotov © (23.11.04 23: 36) [7]

Destruindo dados no GlobalData - ISTO É COMO? Limpar variáveis ​​completamente? :)

E mais do que isso - LIMPAR O ÍNDICE GlobalData! Como?



Гаврила ©   (2004-11-24 00:04) [9]


> [8] Piter


> e o que está errado aqui?


Errado é isso
1. o construtor passou sem exceções e a variável foi inicializada normalmente
2. uma exceção foi lançada no construtor e a variável não foi inicializada (o destruidor foi chamado automaticamente). Mas neste caso, nunca entraremos na trilha. depois de chamar a linha de código do construtor.
isto é, não pode haver situação em que MyObject = nil após o construtor, e quando atingimos essa linha



GuAV ©   (2004-11-24 00:09) [10]

Gavrila © (24.11.04 0: 04) [9]

E aqui também [7] - streams :-)



Piter ©   (2004-11-24 02:43) [11]

Igor Shevchenko © (23.11.04 22: 36) [4]

Como comentar? Afinal, eu disse que os erros nos livros são simplesmente preocupantes e não posso falar inequivocamente sobre o nível do autor ...



Ega23 ©   (2004-11-24 11:16) [12]

isto é, não pode haver situação em que MyObject = nil após o construtor, e quando atingimos essa linha

AFAIK, se MyObject foi igual a zero ANTES de chamar o construtor, ele permanecerá nulo após um erro no construtor.



Sandman25 ©   (2004-11-24 11:22) [13]

[12] Ega23 © (24.11.04 11: 16)

Mas então não entraremos em linha com a verificação.



Ega23 ©   (2004-11-24 11:28) [14]

Ah, sim ... Não há tentativa ...



KSergey ©   (2004-11-24 11:35) [15]

> [12] Ega23 © (24.11.04 11: 16)
> AFAIK, se MyObject foi igual a zero ANTES de chamar o construtor,
> então permanecerá nulo após um erro no construtor.

Não há erros no construtor. Existem apenas exceções. E se estiverem disponíveis, não chegarão à linha com a verificação.



Юрий Зотов ©   (2004-11-24 12:20) [16]

> Piter © (23.11.04 23: 59) [8]

> Destrua dados no GlobalData - ISTO É COMO? Claro
> variáveis ​​de todo? :)

Isso é chamado Dispose ou FreeMem - dependendo de como a memória para esses dados foi alocada anteriormente (New ou GetMem).

> E mais do que isso - CLEAR THE INDEX GlobalData ?! Como?

GlobalData: = nulo



Игорь Шевченко ©   (2004-11-24 12:34) [17]

Piter © (24.11.04 02: 43) [11]

Eu já comentei. Em "Delphi Kingdom"
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1082



Alx2 ©   (2004-11-24 12:36) [18]

> Yuri Zotov © (24.11.04 12: 20)
É tão seguro?



Rem ©   (2004-11-24 13:10) [19]

>> Se o aplicativo for multiencadeado e a variável GlobalData estiver disponível para vários encadeamentos, tudo estará bem ... nada impedirá que outro encadeamento destrua assincronamente dados no endereço GlobalData e limpe o próprio ponteiro.

É improvável que a verificação seja feita com o multithread do aplicativo. Esses sites em um aplicativo multiencadeado são protegidos por seções críticas, no mínimo. Caso contrário, as primeiras duas linhas no exemplo acima serão claramente inseguras.

Minha opinião é um simples erro de digitação. Embora, a julgar estritamente, não deve haver erros de digitação em publicações desse nível.



Agent13 ©   (2004-11-24 13:54) [20]


> Minha opinião é um simples erro de digitação. Embora, a julgar estritamente,
> não deve haver erros de digitação em publicações desse nível.

Por quê? Somos todos pessoas :) E os erros podem estar em qualquer lugar. Outra coisa é que já estava na versão 5, mas eles não consertaram no 6. Isso é algo que não deveria ser permitido.



Юрий Зотов ©   (2004-11-24 13:59) [21]

> Alx2 © (24.11.04 12: 36) [18]

Não, claro. Muito provavelmente, Rem [19] está certo.



Piter (ne doma)   (2004-11-24 15:53) [22]


> Isso é chamado Dispose ou FreeMem - o que for
> do que a memória para esses dados alocados anteriormente (New ou GetMem).


havia um arquivo sendo projetado na memória ...


Citado1 >> E mais do que isso-LIMPAR O ÍNDICE GlobalData ?! Como?
>
> GlobalData: = nulo


Onde é que isso serve? Em outro segmento ou algo assim?
Aqui está o lombo:

GlobalData ^ .S: = "ShareLib";
GlobalData ^ .I: = 1;
se GlobalData = nil então começar
CloseHandle (MapHandle);
RaiseWin32Error;
end;

ou seja, quando atribuímos os valores à estrutura localizada pelo ponteiro, eles NÃO VERIFICARAM NADA. Mas então eles decidiram verificar, esperando que entre essas equipes outro segmento mudaria GlobalData? :)))



Piter ©   (2004-11-24 17:59) [23]

Gavrila © (24.11.04 0: 04) [9]

função de classe TMyObject.Create: TMyObject; começar Resultado: = nulo; fim;

:))))



Kerk ©   (2004-11-24 18:11) [24]

Bem, é apenas um erro no código! Por que tudo está tão animado?



Piter ©   (2004-11-24 19:33) [25]

Igor Shevchenko © (24.11.04 12: 34) [17]
Eu já comentei. Em "Delphi Kingdom"


Eu não vejo você falando sobre Teixer e Pacheco ...



Страницы: 1 filial inteira

Fórum: "Agarrar";
Arquivo atual: 2004.12.12;
Download: [xml.tar.bz2];

em cima





Memória: 0.64 MB
Hora: 0.075 c
3-1100080159
diabolik_krsk
2004-11-10 12:49
2004.12.12
Excluir arquivo * .ldb


14-1100871323
antonn
2004-11-19 16:35
2004.12.12
Conchas ...


1-1101635871
denis24
2004-11-28 12:57
2004.12.12
Verifique a existência de um formulário


1-1101751486
Elast
2004-11-29 21:04
2004.12.12
Classe com tlist


14-1101378308
Tusador
2004-11-25 13:25
2004.12.12
em linha





afrikaans albanês Arabic armênio azerbaijano basco belarusian Bulgarian catalão Chinês simplificado) Chinês tradicional) croata checo dinamarquês Dutch Inglês estoniano filipino Finnish French
Galego georgiano German grego crioulo haitiano hebraico hindi húngaro islandês Indonesian irlandês Italian Japanese Korean letão lituano macedónio Malay maltês Norwegian
persa polonês Portuguese Romeno Russa sérvio Slovak esloveno Espanhol swahili sueco tailandês turco ucraniano urdu vietnamita galês ídiche bengali bósnio
cebuano esperanto gujarati hausa hmong igbo javanês kannada khmer lao latino maori marata mongol Nepali punjabi somali tâmil telugu yoruba
zulu
Английский francês Alemão Italiano Португальский russo Espanhol