调用参数为pchar类型的函数或过程时注意点
2011-04-12 21:08
253 查看
function TForm1.closekey(err: pchar): integer;
begin
result := -1;
StrCopy(err,'CloseKeyboard执行失败')
end;
如果是定义了一个字符串的变量lstr:String,通过pchar(lstr)转换后作为参数传给函数closekey(pchar(lstr));如果只调用一次不会报错,如果是连续调用两次就会出现非法地址错误:Access violation at address
错误的调用方法:
procedure TForm1.Button1Click(Sender: TObject);
var
lstr: String;
i, ret: integer;
begin
for i := 0 to 2 do
begin
ret := closekey(pchar(lstr));
end;
end;
正确的调用方法如下
procedure TForm1.Button1Click(Sender: TObject);
var
lErr: array[0..255] of char;
i, ret: integer;
begin
for i := 0 to 2 do
begin
ret := closekey(@lErr[0]);
end;
end;
begin
result := -1;
StrCopy(err,'CloseKeyboard执行失败')
end;
如果是定义了一个字符串的变量lstr:String,通过pchar(lstr)转换后作为参数传给函数closekey(pchar(lstr));如果只调用一次不会报错,如果是连续调用两次就会出现非法地址错误:Access violation at address
错误的调用方法:
procedure TForm1.Button1Click(Sender: TObject);
var
lstr: String;
i, ret: integer;
begin
for i := 0 to 2 do
begin
ret := closekey(pchar(lstr));
end;
end;
正确的调用方法如下
procedure TForm1.Button1Click(Sender: TObject);
var
lErr: array[0..255] of char;
i, ret: integer;
begin
for i := 0 to 2 do
begin
ret := closekey(@lErr[0]);
end;
end;
相关文章推荐
- MySQL存储过程和自定义函数、Navicat、创建存储过程和函数、调用存储过程和函数、三种方式、In和Out类型参数、
- MySQL存储过程和自定义函数、Navicat、创建存储过程和函数、调用存储过程和函数、三种方式、In和Out类型参数、
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- python调用c函数参数类型问题
- C#调用VC的DLL的接口函数参数类型转换一览表
- 函数调用过程中,函数参数的入栈顺序
- java调用oracle中输入参数是数组类型的函数或者存储过程
- 函数调用过程中,函数参数的入栈顺序,why?
- 使用Microsoft.Practices.EnterpriseLibrary.Data调用存数过程Output参数注意事项
- 函数参数二:不同种类型函数参数及其调用
- _stdcall 调用类型 函数参数压栈方式为什么是从右到左的?
- 一个DELPHI程序要调用DLL,而DLL中的函数名,参数个数,参数类型为不定
- 关于C51的中断函数要注意的几个问题 -----中断中调用函数参数错误问题
- Oracle复合类型参数的存储过程以及JDBC调用
- 如何调用com组件中包含IntPtr类型参数的函数
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- Oracle不支持在select语句中调用自定义函数时使用自定义类型作参数?
- sql 存储过程参数是表类型,数据库中如何调用
- Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)
- C#调用VC的DLL的接口函数参数类型转换一览表