function StudentIDExists(strKskh: OleVariant): WordBool; safecall;
请问OleVariant, wordbool , safecalld 的用法和含义?

解决方案 »

  1.   

    OleVariant是一个变体变量,就像数据库的记录一样,可以由不同数据类型组成;
      

  2.   

    调用约定
     声明过程或函数时,可以指定调用约定(calling convention)。指定调用约定可以使用的指示字包括register、pascal、cdecl、stdcall以及safecall。例如,function MyFunction(X, Y: Real): Real; cdecl; ...调用约定决定了传递给例程的参数的顺序,还影响参数从栈中的解除、参数传递时对寄存器的使用以及处理错误和异常等。缺省的调用约定是register。·register和pascal约定自左向右传递参数;也就是说,最左边的参数最先求值并传递,最右边的参数最后求值并传递。cdecl、stdcall和safecall约定自右向左传递参数。·除cdecl外,对其他所有的约定,过程和函数在返回时即从栈中删除参数。对cdecl约定,则由调用者在调用返回时从栈中删除参数。·register约定最多可以使用三个CPU寄存器传递参数,而其他的约定都通过栈传递所有的参数。·safecall约定实现了异常防火墙。在Windows中,这一实现在内部处理COM错误通知。 下表是调用约定的简要概括: 指示字         参数顺序       参数删除者     是否用寄存器传递参数?
     
    register       从左到右       例程                是
     
    pascal         从左到右       例程                否
     
    cdecl          从右到左       调用者              否
     
    stdcall        从右到左       例程                否
     
    safecall       从右到左       例程                否
      缺省的register约定是效率最高的,因为它通常避免了栈中新帧的创建。(对公布属性published properties的访问必需使用register约定。)调用来自用C或C++编写的共享库的函数时,cdecl约定是很有用的,而对外部代码的调用,一般而言,推荐使用stdcall和safecall约定。在Windows中,操作系统API函数使用的是stdcall和safecall约定。其他操作系统通常使用cdecl约定。(注意,stdcall约定比cdecl约定具有更高的效率。)safecall约定必需用于声明双重接口的方法。pascal约定用于维持向后(旧版本)兼容。有关调用约定的更多信息,见程序控制。指示字near、far和export属于16位Windows编程中的调用约定,它们在32位应用程序中没有影响,仅维持向后兼容。
      

  3.   

    2字节布尔值 WordBool变体类型Delphi 2.0引进了一个功能强大的数据类型,称为变体类型(Variant),主要是为了支持OLE自动化操作。实际上, Delphi的Variant封装了OLE使用的Variant,但Delphi的Variant在Delphi程序的其他领域也很有用。Object Pascal是唯一能在运行期间和编译期间识别Variant 的语言。
    Delphi 3引进了一个新的被称为OleVariant 类型,它跟Variant基本一致,但是它只能表达与OLE自动化操作相兼容的数据类型。Variant能动态改变类型
      有时候变量的类型在编译期间是不确定的,而Variant能够在运行期间动态地改变类型,这就是引入Variant 类型目的。例如,下面的代码在编译期间和运行期间都是正确的:
    var
    V: Variant ;
    begin
      V:='Delphi is Great!';                     //Variant 此时是一个字符串
      V: = 1 ;                                   // Variant 此时是一个整数
      V: = 123.34 ;                              // Variant 此时是一个浮点数
      V: = True ;                                // Variant 此时是一个布尔值
      V:=CreateOleObject('word.Basic');          //Variant此时是一个OLE 对象
    end ;
    Variant能支持所有简单的数据类型,例如整型、浮点型、字符串、布尔型、日期和时间、货币以
    及O L E自动化对象等。注意Variant不能表达ObjectPascal对象。Variant可以表达不均匀的数组(数组的长度是可变的,它的数据元素能表达前面介绍过的任何一种类型,也可包括另一个Variant数组)。
    OleVariant与Variant很相像,两者的差别在于OleVariant仅支持跟自动化相兼容的类型。目前,不能跟自动化相兼容的VType是VarString,即AnsiString类型。当试图把AnsiString字符串赋值给一个OleVariant变量时,AnsiString自动转化为OLE BSTR类型并作为varOleStr存储在Varaint变量中。