L
liguang
Unregistered / Unconfirmed
GUEST, unregistred user!
我发现DELPHI的内存分配和释放函数GetMem和FreeMem最好不要在COM组件的编写过程中使用
否则可能会产生错误.
事情的经历是这样的,由于工作需要,要将一个VC写的DLL用DELPHI封装成为COM组件,在COM
中我需要分配一些内存然后传给VC写的这个DLL由他款充后然后再由我使用.
就是这样一个过程,在使用内存的时候我使用的是GetMem和FreeMem来进行的,程序开始运行
的时候没有问题,可是当一个操作连续跳几次之后问题就来了,灾难性错误,这种错误虽然在
COM组件的编写过程中常见,但是也绝对是令人头痛的事情.于是我开始找错.
最初我怀疑错误是VC DLL填写我分配的内存区所造成的,可是后来经过查找后这种可能性被
排除.这时我就已经感觉到可能是由DELPHI中的内存分配函数与COM组件兼容性不好,所造成
的这个问题,但是又一时没有其它的函数替换.
万般无奈之下向HUBDOG大侠请教,哈大侠告之,在COM中分配内存最好使用IMalloc接口来实现
我就象是得到了救命稻草一样,马上在程序中试了一下,果然如此.看来问题的确是由DELPHI
的内存分配函数所造成的.
补充说明一点:出错的代码段是使用GetMem分配了1.4K左右的内存,而只分配了几百字节的代
码段则没有事情.
否则可能会产生错误.
事情的经历是这样的,由于工作需要,要将一个VC写的DLL用DELPHI封装成为COM组件,在COM
中我需要分配一些内存然后传给VC写的这个DLL由他款充后然后再由我使用.
就是这样一个过程,在使用内存的时候我使用的是GetMem和FreeMem来进行的,程序开始运行
的时候没有问题,可是当一个操作连续跳几次之后问题就来了,灾难性错误,这种错误虽然在
COM组件的编写过程中常见,但是也绝对是令人头痛的事情.于是我开始找错.
最初我怀疑错误是VC DLL填写我分配的内存区所造成的,可是后来经过查找后这种可能性被
排除.这时我就已经感觉到可能是由DELPHI中的内存分配函数与COM组件兼容性不好,所造成
的这个问题,但是又一时没有其它的函数替换.
万般无奈之下向HUBDOG大侠请教,哈大侠告之,在COM中分配内存最好使用IMalloc接口来实现
我就象是得到了救命稻草一样,马上在程序中试了一下,果然如此.看来问题的确是由DELPHI
的内存分配函数所造成的.
补充说明一点:出错的代码段是使用GetMem分配了1.4K左右的内存,而只分配了几百字节的代
码段则没有事情.