请教一个线程的问题
function ToExcel():boolean; stdcall;
function TfrmAging.ToExcel():boolean; stdcall;
var
begin
......
end;
我这样来调用:
procedure TfrmAging.Button1Click(Sender: TObject);
var
FHandle:integer;
FThreadID:DWORD;
begin
FHandle:=CreateThread(nil,0,@ToExcel,nil,0,FThreadID);
if ThreadID=0 then
Exit;
end;
可是每次编译都是出现错误:
[Error] uAging.pas(470): Variable required
2楼: 这种方式我没用过,你可以试一试:
TThread1= class(TThread)
procedure Execute; override;
private
{ Private declarations }
public
{ Public declarations }
end;
在execute里写你的脚本就可以了 如下载财务软件
3楼: CreateThread要求线程执行体函数的形式为:
DWORD WINAPI ThreadFunc( LPVOID );
而你的是作为类TfrmAging的方法的,对象方法有隐含的Self参数,那当然不行
function ToExcel(P: Pointer): DWORD; stdcall;
4楼: procedure TfrmAging.Button1Click(Sender: TObject);
var
FHandle:integer;
FThreadID:DWORD;
begin
FHandle:=CreateThread(nil,0,@TfrmAging.ToExcel,nil,0,FThreadID);
====================
if ThreadID=0 then
Exit;
end;
下划线修改了一下!
5楼: 谢谢kk2000。按照你这样修改后,可以通过编译,可是运行的时候,运行到ToExcel这个函数的时候出现错误:
project E:\test.exe faulted with message :''access aiolation at ......''.
请问是怎么回事呢?
6楼: //那就是你下面的函数里面有些变量访问不到.
function TfrmAging.ToExcel():boolean; stdcall;
var
begin
......
end;
你可以把你的变量声明为全局. 要不然在变量前加上修饰符: frmAging.
因为你的变量属于frmAging 这个变量的. 所以访问不到
记账软件版7楼: 谢谢kk2000,这样运行之后没有问题了,可是我发现
function TfrmAging.ToExcel():boolean; stdcall;这个功能却没有实现出来,也就是说没有生成我需要的excel文件,(这个函数是没有问题的,因为我如果不通过进程调用,可以得到我要的结果的)
8楼: 你的线程是不时没有执行你要执行的东西就挂了!
9楼: to kk2000
谢谢了,原来是没有执行完,呵呵。
请问,处了这种api的线程外,还有其它线程的方法吗,给我几个实例好不好啊,谢谢了
10楼: 你可以全文搜索一下,应该会找到很多的.
11楼: 多人接受答案了。