在类型库编辑器中,根据您使用的是IDL还是Delphi,您可以使用不同的类型标识符。在“环境选项”对话框中指定要使用的语言。
以下类型在COM开发的类型库中有效。Automation compatible列指定该类型是否可以由选中了Automation或Dispinterface标志的接口使用。以下是COM可以通过类型库自动封装的类型:
Delphi type | IDL type | Variant type | Automation compatible | Description |
---|---|---|---|---|
Smallint |
short |
VT_I2 |
Yes |
2-byte signed integer |
Integer |
long |
VT_I4 |
Yes |
4-byte signed integer |
Single |
single |
VT_R4 |
Yes |
4-byte real |
Double |
double |
VT_R8 |
Yes |
8-byte real |
Currency |
CURRENCY |
VT_CY |
Yes |
currency |
TDateTime |
DATE |
VT_DATE |
Yes |
date |
WideString |
BSTR |
VT_BSTR |
Yes |
binary string |
IDispatch |
IDispatch |
VT_DISPATCH |
Yes |
pointer to IDispatch interface |
SCODE |
SCODE |
VT_ERROR |
Yes |
Ole Error Code |
WordBool |
VARIANT_BOOL |
VT_BOOL |
Yes |
True = -1, False = 0 |
OleVariant |
VARIANT |
VT_VARIANT |
Yes |
Ole Variant |
IUnknown |
IUnknown |
VT_UNKNOWN |
Yes |
pointer to IUnknown interface |
Shortint |
byte |
VT_I1 |
No |
1 byte signed integer |
Byte |
unsigned char |
VT_UI1 |
Yes |
1-byte unsigned integer |
Word |
unsigned short |
VT_UI2 |
Yes* |
2-byte unsigned integer |
LongWord |
unsigned long |
VT_UI4 |
Yes* |
4-byte unsigned integer |
Int64 |
__int64 |
VT_I8 |
No |
8-byte signed integer |
Largeuint |
uint64 |
VT_UI8 |
No |
8-byte unsigned integer |
SYSINT |
int |
VT_INT |
Yes* |
system dependent integer (Win32=Integer) |
SYSUINT |
unsigned int |
VT_UINT |
Yes* |
system-dependent unsigned integer |
HResult |
HRESULT |
VT_HRESULT |
No |
32-bit error code |
Pointer |
VT_PTR -> VT_VOID |
No |
untyped pointer | |
SafeArray |
SAFEARRAY |
VT_SAFEARRAY |
No |
OLE Safe Array |
PAnsiChar |
LPSTR |
VT_LPSTR |
No |
pointer to Char |
PChar |
LPWSTR |
VT_LPWSTR |
No |
pointer to WideChar |
PWideChar |
LPWSTR |
VT_LPWSTR |
No |
pointer to WideChar |
注意:
Word、LongWord、SYSINT和SYSUINT可能与某些应用程序兼容。
Byte(VT_UI1)与Automation兼容,但在Variant或OleVariant中不允许使用,因为许多Automation服务器无法正确处理此值。
除了这些IDL类型之外,在库中定义或在引用的库中定义的任何接口和类型都可以在类型库定义中使用。
类型库编辑器以二进制形式将类型信息存储在生成的类型库(.TLB)文件中。
如果将参数类型指定为指针类型,则类型库编辑器通常会将该类型转换为变量参数。保存类型库时,变量参数的关联ElemDesc的IDL标志标记为IDL_FIN或IDL_FOUT。
通常,当类型前面有指针时,ElemDesc IDL标志不会用IDL_FIN或IDL_FOUT标记。或者,在dispinterfaces的情况下,通常不使用IDL标志。在这些情况下,您可能会在变量标识符旁边看到注释,例如{IDL_None}或{IDL_In}。保存类型库时使用这些注释来正确标记IDL标志。