【发布时间】:2013-01-04 10:28:46
【问题描述】:
我有两种类型。一个 A 型和一个 B 型。问题 A 型包含 B 型,B 型包含 A 型。这样的事情是行不通的:
type
typeA = record
test1 : typeB;
end;
type
typeB = record
test2 : typeA;
end;
编辑: 那不是我的设计。我将包含此类结构的 C 头文件(以访问 DLL)转换为 delphi。
编辑2: “C++ 结构是 AFAIR 类的另一个名称。一定有指针,而不是值本身。——Arioch '1 分钟前” 是的,你是对的,它是一个指向类型的指针:
我定义了:
test1 : ^typeB;
这会起作用吗?
test1 : Pointer;
编辑3: C 结构体:
/* DLPDFPAGE */
typedef struct dlpdfpage
{
CosObj Page;
CosObj PrintSelect;
ASFixedRect PageBBox;
ASFixedRect ContentBBox;
struct dlpdfpage *Next;
PDRotate Angle;
struct dlpdfdoc *Doc;
DLPDFSTREAM *Content;
long PageNumber;
char Complete;
char FontSubstituted;
char FontMM;
char FontBad;
} DLPDFPAGE;
/* DLPDFDOC */
typedef struct dlpdfdoc
{
DLPDFINSTANCE *dliInstance;
PDDoc pdDoc;
CosDoc cosDoc;
DLPDFOUTLINE *Outlines;
char *PDFFileName;
char *PDFPostFileName;
DLPOS LastPageEnd;
DLPOS BeforeDef;
ASFixedRect DocBBox;
long PageCount;
long PageTreeWidth;
long PageTreeDepth;
long PageTreeDepthUsed;
DLPDFPAGETREEARRAY *AllPages;
DLPDFFONTLIST *AllFonts;
DLPDFFORMLIST *AllForms;
DLPDFFORMLIST *AllColors;
DLPDFIMAGELIST *AllImages;
DLPDFSPOTCOLORLIST *AllSpotColors;
DLPDFSPOTCOLORLIST *AllPatterns;
DLPDFEXTGSTATELIST *AllExtGStates;
DLPDFPAGE *PageList;
DLPDFPAGE *LastPage;
DLPDFDEST *DeferedDests;
DLPDFSIGNATURE *signatureHolder;
struct dlpdfacroform *AcroFormBase;
CosObj PatternColorObj,
PatternColorRGBObj,
PatternColorCMYKObj,
PatternColorGrayObj,
PrintSelect,
PrintSelectCriteria;
CosObj IdentH, IdentV;
ASAtom DocumentEncoding;
long FontCount;
long FormCount;
long PatCount;
long ImageCount;
char Compress;
char Linearize;
char PageTreeComplete;
char EmbedFonts;
char PatternColorsDefined;
char MakeThumbNails;
ASBool psSevenBitSafe;
ASInt32 EncryptKeyByteCount;
char condenseResDicts;
CosObj resourceDict;
ASInt16 pdfMajorVer;
ASInt16 pdfMinorVer;
DLPDFINCLUDEDRES *InclRes;
DLPDFSPOTCOLORLIST *AllShadings;
long ShadeCount;
} DLPDFDOC;
【问题讨论】:
-
C++ 结构是 AFAIR 类的另一个名称。而且肯定有指针,而不是值本身。
-
您应该发布原始的 C 类型声明,以便我们可以提供一些实际帮助,而不仅仅是解释您尝试的方法不起作用的原因。
-
@Arioch'The,即使
C++结构与class相同,C++ 类也不会自动从堆中分配,并且不会自动分配类类型的变量引用类型(与 Delphi 不同)。这不是 C++ 中的指针:aname aClassType;- 但这是:aname* aClassType;。 -
我发布了 C Sruct 部分
-
Q.E.D. - C 中的星号“*”表示指针,如 PAscal 中的“^”插入符号
标签: c delphi pointers types record