Formato de arquivo do Windows 3.1 de cartão

Isenção de Responsabilidade para Conteúdo da KB Desativado

Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e não será mais atualizado.

Sumário

Este artigo documenta o formato de arquivo usado pelo arquivo de fichas do Microsoft Windows version 3.1. Observe que o arquivo de fichas formato do arquivo (. CRD) pode mudar em versões futuras. Todos os números neste documento, incluindo aqueles no texto descritivo, devem ser interpretados como algarismos hexadecimais. Todos os ponteiros de dados e contagem de bytes no arquivo são inteiros não assinados de binário/hexadecimal em formato de menos para mais significativo. Todo o texto no arquivo é salvo no formato ASCII baixo. Na seção de texto de dados da placa, < CR > é sempre seguida por < LF >.

Mais informações

Alterações de arquivo de cartão no NT 3.51



A única diferença no formato unicode é a assinatura (DKO) e os caracteres, enquanto 16 bits ampla. A assinatura agora pode ser MGC.


O formato de arquivo do arquivo de fichas é a seguinte:
   Byte #  Description
-------------------
0 - 2 Signature bytes--always "RRG" (52 52 47).
3 - 6 Last object's ID.
7 - 8 Number of cards in file.

Além do primeiro 9 bytes são as linhas de índice - as informações sobre a linha superior de cada placa. A primeira entrada de índice começa no byte 9 no arquivo e entradas sucessivas começam 34 bytes após o início da última entrada de índice (a segunda entrada em byte 3D, a terceira entrada em byte 71 e assim por diante). O formato para cada entrada de índice de linha é a seguinte:
   Byte #  Description
-------------------
0 - 5 Null bytes, reserved for future use (should all be 00).
6 - 9 Absolute position of card data in file.
A Flag byte (00).
B - 32 Index line text.
33 Null byte; indicates end of index entry.

Após a última entrada de índice, os dados da cada placa são armazenados. Dados do cartão são um dos quatro formatos gerais: gráfico e texto, somente texto, apenas o elemento gráfico e em branco. Cartões em branco consistem em 4 bytes nulos; os outros formatos de cartão são os seguintes:
   Graphic       Text     Graphic
& Text Only Only
-------------------------------------------------------------------
0 - 1 0 - 1# 0 - 1 Flag Determining whether or not
the card contains an object.
2 - 5 * 2 - 5 Unique object ID.
6 - x * 6 - x The OLE object.
x+1 - x+2 * x+1 - x+2 Character width, used for device
independence.
x+3 - x+4 * x+3 - x+4 Character height.
x+5 - x+C * x+5 - x+C RECT: left - X-coordinate of the
upper-left corner.
top - Y-coordinate of the
upper-left corner.
right - X-coordinate of the
lower-right corner.
bottom- Y-coordinate of the
lower-right corner.
x+D - x+E * x+D - x+E Object type embedded=0, linked=1,
or
static=2 (values may change in the
future).
x+F - x+10 2 - 3 x+F - x+10# Length of text entry.
x+11 - y 4 - z * Text.

OBSERVAÇÃO:
   x = 6 + size in bytes of the entire OLE object (the entire size of the
object is not stored anywhere within the .CRD file). See below for
more information on the OLE object size.
y = x + 10 + length of text entry.
z = 3 + length of text entry.
# - These bytes are null if no object/text.
* - These bytes do not exist if no object/text.

O primeiro byte de qualquer placa entrada de dados é apontado por bytes 6-9 na entrada do índice. Observe que nenhum byte nulo é usado para indicar o final da entrada de dados do cartão; entrada de dados da placa próxima imediatamente após o último byte da entrada anterior, que é nulo somente se o cartão anterior não tiver texto (comprimento nulo de entrada de texto).

Objeto OLE

O tamanho do objeto OLE não é armazenado em qualquer lugar dentro do. Arquivo CRD. O objeto OLE foi possível carregar OleLoadFromStream(); No entanto, para obter passado o objeto OLE, o arquivo precisa ser analisada. Descrição do formato do objeto OLE está documentada no Apêndice C da "Referência de vinculação e incorporação de objetos do programador de objeto" versão 1.0, publicado pela Microsoft Press e também no Microsoft Windows Software Development Kit (SDK) "referência do programador, Volume 1: Visão geral," Capítulo 6, o formato de armazenamento do objeto. A seguir é um algoritmo que usa a descrição do formato do objeto OLE para analisar o objeto OLE na. CRD arquivo e passá-lo.

Precisa de cinco funções principais

   Primary Function        Description
-----------------------------------
ReadLong() - Reads a long from the file and advances the file
pointer.
EatBytes(NumBytes) - Reads and discards the specified number of bytes
from the file and advances the file pointer.
RdChkVer() - Reads the version number and advances the file
pointer and returns TRUE if version is 1.0. To
check the version number, the received value
must be converted to Hex then checked against
0x0100.
(See below for the algorithm of this function.)
RdChkString() - Reads the string and checks the value to see if
it is either METAFILEPICT, BITMAP, or DIB, then
returns TRUE; otherwise, returns FALSE. Advances
the file pointer too.
SkipPresentationObj() - Reads and skips the variable-length presentation
object at the end of each object type.
(See below for the algorithm of this function.)

Algoritmo para ignorar sobre o objeto OLE

if (RdChkVer)                  // If the version is 1.0  Format = ReadLong();         // 1==> Linked, 2==> Embedded, 3==> Static
EatBytes(ReadLong()); // Class String
if (Format == 3) // Static object
ReadLong(); // Width in mmhimetric.
ReadLong(); // Height in mmhimetric.
EatBytes(ReadLong()); // Presentation data size and data itself.
else // Embedded or linked objects.
EatBytes(ReadLong()); // Topic string.
EatBytes(ReadLong()); // Item string.
if (Format == 2) // Embedded object.
EatBytes(ReadLong()); // Native data and its size.
SkipPresentationObj() // Read and eat the presentation object.
else // Linked object.
EatBytes(ReadLong()); // Network name.
ReadLong(); // Network type and net driver version.
ReadLong(); // Link update options.
SkipPresentationObj() // Read and eat the presentation object.

SkipPresentationObj()

if (RdChkVer)                  // If the version is 1.0  ReadLong();                  // Format ID
if (RdChkString()) // if Class String is either
// METAFILEPICT or BITMAP or DIB.
ReadLong(); // Width in mmhimetric.
ReadLong(); // Height in mmhimetric.
EatBytes(ReadLong()); // Presentation data size and data itself
else
if (!ReadLong()) // if Clipboard format value is NULL
EatBytes(ReadLong()); // Read Clipboard format name.
EatBytes(ReadLong()); // Presentation data size and data itself.

RdChkVer()

OLEVer = ReadLong();OLEVer = (((WORD)(LOBYTE(OLEVer))) << 8 | (WORD) HIBYTE(OLEVer);
if (OLEVer == 0x0100) // Always use Hex value.
return TRUE;
else
return FALSE;


Referências adicionais: 3.10
Propriedades

ID do Artigo: 99340 - Última Revisão: 12 de jan de 2017 - Revisão: 1

Comentários