十一月 2009

Delphi 2010中用Delayed 属性实现DLL接口的延迟加载

在Delphi2010的Windows.pas有下面的API定义

function CloseTouchInputHandle; external user32 name 'CloseTouchInputHandle' delayed;

CloseTouchInputHandle这个API是Windows7特有的API,在以前的Delphi版本中,一旦我们的程序使用了这个API,并且在Window7以外的操作系统上运行时,在加载的阶段就会报错。但是在Delphi2010上由于使用Delayed这个属性,则在运行时真正调用到了这个API的时候才会抛出异常。

 

Vista和拖放操作

这两天为程序添加一个接收资源管理器中拖放过来的文件功能,结果发现一个问题,在Vista上通常权限的情况下,可以正常接收资源管理器的拖放,但是一旦程序提成权限为管理员时,就不能接受拖放了,查了一下原来是Vista的权限管理禁止在不同权限的进程间使用基于COM的拖放,这样会有安全漏洞。

Windows和Linux文件锁的不同

测试文件发送Service时发现了一个Bug,在Windows上用写模式打开一个文件,默认会创建一个排他锁,也就是其它的应用无法同样用写模式打开一个文件。但是在Linux上运行的时候,Linux不会创建排他锁,导致发送的文件不完整。

查了一下,没有什么特别好的方法,后来改成一个先生成一个临时文件,然后将文件改名为真实文件来避免读写的不同步。