对于象VB类的编译器而言,引用就是指针
在多语言协同开发的时候
首要遵循的一个最重要的原则就是:
谁分配,谁释放
例如,DELPHI中可能会直接使用pchar(somestring)来得到一个指针,最后该指针指向的
内容的释放是通过somestring的自动释放而释放的
而如果使用AllocMem,则需要FreeMem来释放
对于VB而言,假使你使用的是一个STRING的引用,最后该指针的内容的释放是由STRING
的自动释放而释放的
在这个具体的例子里,dll根本无需理会resource的释放问题,但是dest却很难处理,
第一,dest是调用者分配的,被调用者不知道如何处理
第二,执行完后dest可能会被被调用者修改,而调用者不知道该如何处理释放问题。
因此,无论如何处理,均有问题。Leak无法避免。
因此,这个FUN在多语言混合编程里,可以说是一个“错误”的程序
作者可能只是希望可以回传内容给DEST,其实这可以通过类似于操作系统的API方法来实现
例如:
UINT GetSystemDirectory(
LPTSTR lpBuffer, // address of buffer for system directory
UINT uSize // size of directory buffer
);
翻译成为DELPHI API就是:
Function GetSystemDirectory(lpBuffer
char;uSize
WORD)
WORD;
lpBuffer是一个预先分配好的缓冲区,用于被调用者回填,uSize是其大小。
这样,使用VB类的来调用,可以先申明一个字符串
然后将字符串的大小设置成一个可能的最大长度
procedure fun(dest:pchar;destSize:dword;const resource:pchar);
调用:
string a,b
set a to length equ maxSize
fun(a,maxSize,b)