Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-03-2009
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
LongWord(pc^) := $3D3D3D3D; typecast delphi 2009 win32

estoy probando delphi 2009. win32
con un proyecto que tengo.. y donde se hace typecast
obtengo el error
[DCC Error] SimpleXML.pas(709): E2089 Invalid typecast

Código Delphi [-]
procedure OctetToChars(po: POctet; aCount: Integer; pc: PChars);
var
    o: Integer;
begin
    if aCount = 1 then begin
        o := po.a shl 16;
        LongWord(pc^) := $3D3D3D3D;
        pc.a := Base64Map[(o shr 18) and $3F];
        pc.b := Base64Map[(o shr 12) and $3F];
    end
    else if aCount = 2 then begin
        o := po.a shl 16 or po.b shl 8;
        LongWord(pc^) := $3D3D3D3D;
        pc.a := Base64Map[(o shr 18) and $3F];
        pc.b := Base64Map[(o shr 12) and $3F];
        pc.c := Base64Map[(o shr 6) and $3F];
    end
    else if aCount > 2 then begin
        o := po.a shl 16 or po.b shl 8 or po.c;
        LongWord(pc^) := $3D3D3D3D;
        pc.a := Base64Map[(o shr 18) and $3F];
        pc.b := Base64Map[(o shr 12) and $3F];
        pc.c := Base64Map[(o shr 6) and $3F];
        pc.d := Base64Map[o and $3F];
    end;
end;

¿alguna idea de como hacer el typecast?
Responder Con Cita
  #2  
Antiguo 14-03-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Disculpa la ignorancia pero desconozco el tipo "PChars"... es un array of PChar? un puntero de un array of PChar?

PCardinal(pc)^
PIntegerArray(pc)[666]
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #3  
Antiguo 15-03-2009
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
si asi es....es un arrary de pchar..

estoy convirtiendo la version modificada de synedit.
el synedit Studio..

para que sea compatible con delphi 2009 win32

http://yaoqiaofeng.blog.163.com/blog...7101974839201/

de aqui lo descargas.

http://www.box.net/shared/jt3hcg79zr

LongWord(pc^) := $3D3D3D3D;

es el archivo simplexml.pas
hasta donde he logrado convertir a delphi 2009 win32
por que una vez compilado e instalador pasare a su uso y ver si todo va bien.

la unidad con la definicion de pchars

Código Delphi [-]

unit SimpleXML;

{$I SynUniHighlighter.inc}

interface

uses
  Windows, SysUtils, Classes;

const
  BinXmlSignatureSize = Length('< binary-xml >');
  BinXmlSignature: String = '< binary-xml >';

  BINXML_USE_WIDE_CHARS = 1;
  BINXML_COMPRESSED = 2;

  XSTR_NULL = '{{null}}';
  
  NODE_INVALID = $00000000;
  NODE_ELEMENT = $00000001;
  NODE_ATTRIBUTE = $00000002;
  NODE_TEXT = $00000003;
  NODE_CDATA_SECTION = $00000004;
  NODE_ENTITY_REFERENCE = $00000005;
  NODE_ENTITY = $00000006;
  NODE_PROCESSING_INSTRUCTION = $00000007;
  NODE_COMMENT = $00000008;
  NODE_DOCUMENT = $00000009;
  NODE_DOCUMENT_TYPE = $0000000A;
  NODE_DOCUMENT_FRAGMENT = $0000000B;
  NODE_NOTATION = $0000000C;


implementation

uses
{$IFDEF SYN_COMPILER_6_UP}
  Variants, DateUtils;
{$ELSE}
  SimpleXML_D5Emulate;
{$ENDIF}


function IsXmlDataString(const aData: String): Boolean;
var
  i: Integer;
begin
  Result := Copy(aData, 1, BinXmlSignatureSize) = BinXmlSignature;
  if not Result then begin
    i := 1;
    while (i <= Length(aData)) and (aData[i] in [#10, #13, #9, ' ']) do
      Inc(i);
    Result := Copy(aData, i, Length(')) = ';
  end;
end;

function XmlIsInBinaryFormat(const aData: String): Boolean;
begin
  Result := Copy(aData, 1, BinXmlSignatureSize) = BinXmlSignature
end;

var
  Base64Map: array [0..63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

type
  PChars = ^TChars;
  TChars = packed record a, b, c, d: Char end;
  POctet = ^TOctet;
  TOctet = packed record a, b, c: Byte; end;

procedure OctetToChars(po: POctet; aCount: Integer; pc: PChars);

var
  o: Integer;
begin
  if aCount = 1 then begin
    o := po.a shl 16;
    LongWord(pc^) := $3D3D3D3D;
    pc.a := Base64Map[(o shr 18) and $3F];
    pc.b := Base64Map[(o shr 12) and $3F];
  end
  else if aCount = 2 then begin
    o := po.a shl 16 or po.b shl 8;
    LongWord(pc^) := $3D3D3D3D;
    pc.a := Base64Map[(o shr 18) and $3F];
    pc.b := Base64Map[(o shr 12) and $3F];
    pc.c := Base64Map[(o shr 6) and $3F];
  end
  else if aCount > 2 then begin
    o := po.a shl 16 or po.b shl 8 or po.c;
    LongWord(pc^) := $3D3D3D3D;
    pc.a := Base64Map[(o shr 18) and $3F];
    pc.b := Base64Map[(o shr 12) and $3F];
    pc.c := Base64Map[(o shr 6) and $3F];
    pc.d := Base64Map[o and $3F];
  end;
end;

function BinToBase64(const aBin; aSize, aMaxLineLength: Integer): String;
var
  o: POctet;
  c: PChars;
  aCount: Integer;
  i: Integer;
begin
  o := @aBin;
  aCount := aSize;
  SetLength(Result, ((aCount + 2) div 3)*4);
  c := PChars(Result);
  while aCount > 0 do begin
    OctetToChars(o, aCount, c);
    Inc(o);
    Inc(c);
    Dec(aCount, 3);
  end;
  if aMaxLineLength > 0 then begin
    i := aMaxLineLength;
    while i <= Length(Result) do begin
      Insert(#13#10, Result, i);
      Inc(i, 2 + aMaxLineLength);
    end
  end;
end;

function CharTo6Bit(c: Char): Byte;
begin
  if (c >= 'A') and (c <= 'Z') then
    Result := Ord(c) - Ord('A')
  else if (c >= 'a') and (c <= 'z') then
    Result := Ord(c) - Ord('a') + 26
  else if (c >= '0') and (c <= '9') then
    Result := Ord(c) - Ord('0') + 52
  else if c = '+' then
    Result := 62
  else if c = '/' then
    Result := 63
  else
    Result := 0
end;
Responder Con Cita
  #4  
Antiguo 15-03-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Según este archivo que me tomé la libertad de buscar:
http://mailz.googlecode.com/svn/trunk/SimpleXml.pas, los tipos POctet y PChars están declarados así en esa unidad:
Código Delphi [-]
type
  PChars = ^TChars;
  TChars = packed record a, b, c, d: Char end;
  POctet = ^TOctet;
  TOctet = packed record a, b, c: Byte; end;

El problema es que, debido a la introducción del Unicode, en Delphi 2009 el tipo Char (tradicionalmente de un byte de tamaño y equivalente a AnsiChar) pasa a ser un WideChar (de dos bytes), haciendo que la estructura compacta TChars deje de ser de sólo 4 bytes (el tamaño de un LongWord).

La solución, está en esta recomendación del Dr. Bob:
Cita:
Delphi 2009 Character types are Char, AnsiChar and WideChar, where Char defaults to WideChar. In previous versions of Delphi, a Char would be equivalent to an AnsiChar. In order to ensure existing code compiler without changes in behaviour, change Char to AnsiChar (as well as PChar to PAnsiChar).
De tal manera que esa parte del código quede como lo dejaron aquí: http://www.google.com/codesearch/p?h.../XStrUtils.pas
Código Delphi [-]
type
        PChars = ^TChars;
        TChars = packed record a, b, c, d: AnsiChar end;
        POctet = ^TOctet;
        TOctet = packed record a, b, c: Byte; end;

Con ese pequeño cambio ya no te aparecerá el error.

Saludos.

Al González.

P.D. Ahora veo que ya nos diste una referencia para encontrar el archivo, confirmándose lo del Char.
Responder Con Cita
  #5  
Antiguo 15-03-2009
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino

[cHackAll]

Al González



gracias a ambos
estoy revisando.. y parece que por ahi va.. pero no.. logra compilar..

hay que seguir revisando..
Responder Con Cita
  #6  
Antiguo 15-03-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por JXJ Ver Mensaje
...pero no.. logra compilar..
ni si quiera con las nota de Al y la mia?

Código Delphi [-]
TChars = packed record a, b, c, d: AnsiChar end;

// . . .

 PCardinal(pc)^ := $3D3D3D3D;
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #7  
Antiguo 16-03-2009
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
asi es.. ..

por que se usa

Código Delphi [-]
var
//  Base64Map: array [0..63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  Base64Map: array [0..63] of AnsiChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

y es un array de char.
al se rusado por bin to char

Código Delphi [-]
//function CharTo6Bit(c: Char): Byte;
function CharTo6Bit(c: AnsiChar): Byte;
begin
  if (c >= 'A') and (c <= 'Z') then
    Result := Ord(c) - Ord('A')
  else if (c >= 'a') and (c <= 'z') then
    Result := Ord(c) - Ord('a') + 26
  else if (c >= '0') and (c <= '9') then
    Result := Ord(c) - Ord('0') + 52
  else if c = '+' then
    Result := 62
  else if c = '/' then
    Result := 63
  else
    Result := 0
end;

asi compila e instala. pero
la funcionalidad de usar highlighters con la funcionalidad agregada de
codefolding, y el resaltado de varios lenguajes de programacion.

no se logra por que esta basada en archivos XML
y estos los lee basado en char. y byte

entonces a esperar a que el chino lo actualize de delphi 2009.

por que me gusta por que es casi el la misma funcionalidad del ide delphi 2009
ademas de el codefolding que no es como del ide delphi 2006 y en adelante
sino que esta marcado con una barrita que no corre por completo en el gutter
sino por secciones. eso ayuda mucho a distinguir donde termina
un procedure, funcion.


y ademas. por que tiene la barrita qeu cambia de color con el estado de edicion de la linea

Responder Con Cita
  #8  
Antiguo 14-04-2009
kikin kikin is offline
Registrado
 
Registrado: feb 2009
Posts: 8
Poder: 0
kikin Va por buen camino
jajaja revivi un post..
Responder Con Cita
  #9  
Antiguo 14-04-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por JXJ Ver Mensaje
estoy convirtiendo la version modificada de synedit.
el synedit Studio..

para que sea compatible con delphi 2009 win32
¿Y no has probado con la versión unicode de las synedit? Al parecer, tiene ya un soporte preliminar para delphi 2009. Quizá sea más sencillo partir de ahí.

// Saludos
Responder Con Cita
  #10  
Antiguo 16-04-2009
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 21
JXJ Va por buen camino
kikin .. Roman.
gracias por su interes.


el soporte para delphi 2009 de los unisynedit. es bueno
pero las caracteristicas de codefolding y la barrita de lado izquierdo
del synedit Studio. son las que me interesan.

y hacer funcionar el codefolding, depende de leer un archivo xml.

hasta ahora no he logrado hacer funcionar componentes de terceros
que manipulan archivos xml en delphi 2009.

Mas que nada por el BOM. y por que se lee caracter por caracter
y hacer que AnsiString. WideString, y String. compile y se ejecute bien
con el compilador de delphi 2009, hasta ahora me es imposible..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
February 2009 Release de Delphi Prism 2009 rruz Noticias 1 12-03-2009 21:43:11
delphi 2009 win32 JXJ La Taberna 2 03-02-2009 01:25:42
Evento Delphi 2009 y C++ Builder 2009 en Guadalajara y Mexico con David poliburro Noticias 14 15-09-2008 01:03:58
Llamada a Servicios Web desde Delphi 2006 (Delphi for Microsoft Win32) lacovera Internet 2 27-06-2007 16:54:29
Migración de Delphi win32 a Asp.Net amigojar .NET 3 28-09-2006 22:04:19


La franja horaria es GMT +2. Ahora son las 01:54:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi