摘要:
转自:http://www.cnblogs.com/manors/archive/2010/05/17/COM_Initialize_STA_MTA.html 调用任何COM组件之前,你必须首先初始化COM套件环境,即调用CoInitialize或CoInitializeEx。COM套件环境在线程 的生存周期内有效,线程退出前需要调用CoUninitialize释放COM套件。所谓COM套件,实际上是微软为了方便大家理解而起的一个名字,不过个人认为改名词很难理解。COM套件只指COM组件运行时的环境,其中包括 COM组件的数据、变量、线程调度方式。COM套件分为两种模式,单线程套件(STA)和 阅读全文
摘要:
procedure VariantToStream (const v : OleVariant; Stream : TMemoryStream); var p : pointer; begin Stream.Position := 0; Stream.Size := VarArrayHighBound (v, 1) - VarArrayLowBound (v, 1) + 1; p := VarArrayLock (v); Stream.Write (p^, Stream.Size); VarArrayUnlock (v); Stream.Position := 0; en... 阅读全文
摘要:
为何要使用 Aarry of Const呢?由于 Aarry of Const是一种优化过的变体数组,我们让她来做传入参数,相当灵活和方便。 试想一下,如果三层客户端接口为:OpenQuery([ParamName1,ParamValue1,ParamName2......]),客户端 接口函数会显得非常简洁和一目了然,可以接受动态的参数名和参数值。当然,在传入参数,你还可以使用TParams做传入参数,处理起来也是很灵活和方 便。但我个人不太喜欢创建对象方式的传入参数。你还可以用字符串做传入参数,然后再解析,这种方式不是很严谨,而且敲代码的人会很累和容易导致人为录入错 误。 对比Aa... 阅读全文
摘要:
最终编辑 e__jin Socket 通信在Windows 中是排队的形式由操作系统处理,而且接收方和发送方相互协同工作,否则就会造成数据丢失。因此,不能用类似于for 语句的循环来实现对多组数据的发送,更不能用循环语句来接收数据。比如,你可以用for 语句来实型若干文件的复制,这很普遍也很正常,但在 Socket编程以及大多数网络应用编程中都是行不通的,因为网络通信的基本方式是请求和应答。另外,和所有的通信编程一样,Socket编程也遵循数据 分包传送这一基本规则。也就是说,在 Socket编程中,每次发送和接收一个包,以保证数据传输的安全性和稳定性,同时也不至于过多地占用系统资源。... 阅读全文
摘要:
最终编辑 e__jin Delphi 7中带有两套TCP Socket组件:Indy Socket组件(IdTCPClient和IdTCPServer)和Delphi原生的TCP Socket组件(ClientSocket和ServerSocket)。 但是,Borland已宣称ClientSocket和ServerSocket组件即将被废弃,建议用相应的Indy组件来代替。因此,笔者使用了 Indy。本文在对Indy进行简要介绍的基础上,创建了一组简单的TCP Socket数据传输应用来演示了Indy的使用方法。 开放源代码的Internet组件集——Int... 阅读全文
摘要:
最终编辑 e__jin { windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。 而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。 用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储, 只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去 生成一个临时文件再从临时文件启动进程。另外这段代码也提供了一种自己写exe外壳的简单途径, 如果能配合其它各种外壳技术就更好地保护你的exe文件。 原理很简单:就是“借尸还魂”,启动一个僵尸进程(NT下可以是自身程序启动的另一个进程.. 阅读全文