淡泊明志 宁静致远
宠辱不惊 闲看庭前花开花落 去留无意 漫随天外云卷云舒
I have written an Assembly that also exposed itself as a COM object using
C#.NET.

When I am trying to do "Import Type Library" from Delphi 6 Pro I am
receiving these errors when trying to compile.


[Error] mscorlib_TLB.pas(5194): Type 'Byte' is not yet completely defined
[Error] mscorlib_TLB.pas(
5209): Type 'Double' is not yet completely defined
[Error] mscorlib_TLB.pas(
5235): Type 'Int64' is not yet completely defined
[Error] mscorlib_TLB.pas(
5267): Type 'Single' is not yet completely defined
[Error] mscorlib_TLB.pas(
5747): Illegal type in OLE automation section: 'Byte'
[Error] mscorlib_TLB.pas(
5754): Illegal type in OLE automation section: 'Single'
[Error] mscorlib_TLB.pas(
5755): Illegal type in OLE automation section: 'Double'
[Error] mscorlib_TLB.pas(
10874): Illegal type in OLE automation section: 'Byte'
[Error] mscorlib_TLB.pas(
10881): Illegal type in OLE automation section: 'Single'
[Error] mscorlib_TLB.pas(
10882): Illegal type in OLE automation section: 'Double'
[Fatal Error] TestCOM_TLB.pas(
60): Could not compile used unit 'mscorlib_TLB.pas' 

.Net defines some types that are defined in VCL. Download Managed VCL and use mscorlib_tlb.pas from there - it is in source and even in trial version. Or open $(Delphi)\Bin\tlibimp.sym in notepad (backup existing version first) and add:

;;==============================================;;
;; Map mscorlib CoClasses to better names       ;;
;;
==============================================;;
[
{BED7F4EA-1A96-11D2-8F08-00A0C9A6186D}:TypeNames]
Byte
=CLRByte
Double
=CLRDouble
Single
=CLRSingle
Int16
=CLRInt16
Int32
=CLRInt32
Int64
=CLRInt64
String
=CLRString
Object
=CLRObject
Array
=CLRArray
Enum
=CLREnum
Boolean
=CLRBoolean
Char
=CLRChar
Guid
=CLRGuid
Type
=CLRType
Void
=CLRVoid
Pointer
=CLRPointer
Exception
=CLRException

然后,重新打开Delphi,重新导入tlb文件,编译OK!

posted on 2008-01-24 11:22  RainWaterLily  阅读(1934)  评论(1编辑  收藏  举报