delphi - 类型差异

标签 delphi types compilation

德尔福。

为什么

type 
  myInt = Integer;
  myNewInt = -2147483648..2147483647;

var 
  a: myint;
  b: myNewInt;

begin
  a := b;
end;

尽管类型形式不同,但它可以正常编译 - 一个是在这里声明的,另一个是从其他模块继承的。如果

uses 
  windows;

type
   _FILETIMEA = record // Copy from windows.pas
     dwLowDateTime: DWORD;
     dwHighDateTime: DWORD;
   end;

var 
  x: _FILETIMEA;
  y: windows._FILETIME;

begin
  x := y;
end;

将导致编译错误(行x:=y; [DCC Error] ... E2010 不兼容的类型:'windows._FILETIME' 和 '_FILETIMEA' ),但是类型 _FILETIMEA = Windows._FILETIME

最佳答案

Delphi 不支持鸭子类型。您有 2 条不同的记录。它们只是看起来很像,但对于编译器来说它们是两种不同的类型。如果你想分配这两个变量,你必须对它们进行类型转换,因为它们具有相同的大小。

x := _FILETIMEA(y);

关于delphi - 类型差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540780/

相关文章:

database - 我应该在哪里保存半临时数据库?

c - unsigned 和 int 陷阱

types - Rust函数签名和失效

java - 这在 Java : Map<SomeObject, Map<SomeOtherObject>> 中可能吗?

clojure - 编译Clojure?

delphi - 如何可靠地将 Virtual TreeView 滚动到底部?

delphi - 是否可以通过在运行时添加应用程序 list 来执行 **运行时主题** 的运行时可选切换?

delphi - Delphi秒表时间格式

linux - 无法将 ‘const timeval’ 转换为 ‘__time_t {aka long int}’

c++ - 如何使用 Turbo C++ 编译器在 Notepad++ 中编译和调试 C++