七、字符数组的运算。C语言中,是没有字符串类型的,因此,字符串都是用字符数组来实现,于是也有一套str打头的库函数以进行字符数组的运算,如以下代码: char str[15]; char *pstr; strcpy(str, "teststr"); strcat(str, "_testok"); pstr = (char*) malloc(sizeof(char) * 15); strcpy(pstr, str); printf(pstr); free(pstr); 而在Object Pascal中,有了String类型,因此可以很方便的对字符串进行各种运算。但是,有时我们的Pascal代码需要与C的代码交互(比如:用Object Pascal的代码调用C写的DLL或者用Object Pascal 写的DLL准备允许用C写客户端的代码)的话,就不能使用String类型了,而必须使用两种语言通用的字符数组。 其实,Object Pascal提供了完全相似C的一整套字符数组的运算函数,以上那段代码的Object Pascal 版本是这样的: var str : array [1..15] of char; pstr : PChar; //Pchar 也就是 ^Char begin StrCopy(@str, 'teststr'); //在C中,数组的名称可以直接作为数组首地址指针来用 //但Pascal不是这样的,因此 str前要加上取地址的运算符 StrCat(@str, '_testok'); GetMem(pstr, sizeof(char) * 15); StrCopy(pstr, @str); Write(pstr); FreeMem(pstr); end; 八、函数指针。在动态调用DLL中的函数时,就会用到函数指针。假设用C写的一段代码如下: typedef int (*PVFN)(int); //定义函数指针类型 int main() { HMODULE hModule = LoadLibrary("test.dll"); PVFN pvfn = NULL; pvfn = (PVFN) GetProcAddress(hModule, "Function1"); pvfn(2); FreeLibrary(hModule); } 就我个人感觉来说,C语言中定义函数指针类型的typedef代码的语法有些晦涩,而同样的代码在 Object Pascal中却非常易懂: type PVFN = Function (para : Integer) : Integer; var fn : PVFN; //也可以直接在此处定义,如:fn : function (para:Integer):Integer; hm : HMODULE; begin hm := LoadLibrary('test.dll'); fn := GetProcAddress(hm, 'Function1'); fn(2); FreeLibrary(hm); end; |
正在阅读:浅谈Object Pascal的指针浅谈Object Pascal的指针
2004-02-14 09:34
出处:PConline
责任编辑:zwg
键盘也能翻页,试试“← →”键