Delphi 调用 C# Dll 时一个编译问题 mscorlib_TLB.h Ambiguity between 'String' and 'System::String'

来源:互联网 发布:君泽君 知乎 编辑:程序博客网 时间:2024/05/21 12:41

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 typein OLE automation section:'Byte'
[Error] mscorlib_TLB.pas(
5754): Illegal typein OLE automation section:'Single'
[Error] mscorlib_TLB.pas(
5755): Illegal typein OLE automation section:'Double'
[Error] mscorlib_TLB.pas(
10874): Illegal typein OLE automation section:'Byte'
[Error] mscorlib_TLB.pas(
10881): Illegal typein OLE automation section:'Single'
[Error] mscorlib_TLB.pas(
10882): Illegal typein 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

原创粉丝点击