我用VC6.0写了一个关于socket传送文件的DLL,在delphi调用这个DLL, 函数原型
void _stdcall SendFileThread(char* szFileName) procedure TFormMain.BtnSendFileClick(Sender: TObject);
var
vStrFileName: String;
vFileName: PChar;
begin
if OpenDialog1.Execute then
begin
vStrFileName := ExtractFileName(OpenDialog1.FileName);
//vFileName := AllocMem(100);
vFileName := pchar(vStrFileName);
SendFileThread(vFileName); //发送文件(文件名不包含路径)
end;
end;
1.请教一下,在这种情形下,//vFileName := AllocMem(100);用不用加?不加也不会出错好象
2.这里的PChar是由谁释放的,啥时候释放的?如果不释放,就算一秒传1个文件名,一天下来系统也受不了吧?
3.为啥我取文件名的时候,不用带路径啊,不带路径,系统也能正确找到文件,在VC代码中也不用带路径的.
4.如果这里的pchar释放早了,DLL还会收到参数吗? 我在MFC版也发了此问题,
http://topic.csdn.net/u/20090106/15/2f7ce821-9df6-4df8-ad47-b8f25c7ec5c7.html
void _stdcall SendFileThread(char* szFileName) procedure TFormMain.BtnSendFileClick(Sender: TObject);
var
vStrFileName: String;
vFileName: PChar;
begin
if OpenDialog1.Execute then
begin
vStrFileName := ExtractFileName(OpenDialog1.FileName);
//vFileName := AllocMem(100);
vFileName := pchar(vStrFileName);
SendFileThread(vFileName); //发送文件(文件名不包含路径)
end;
end;
1.请教一下,在这种情形下,//vFileName := AllocMem(100);用不用加?不加也不会出错好象
2.这里的PChar是由谁释放的,啥时候释放的?如果不释放,就算一秒传1个文件名,一天下来系统也受不了吧?
3.为啥我取文件名的时候,不用带路径啊,不带路径,系统也能正确找到文件,在VC代码中也不用带路径的.
4.如果这里的pchar释放早了,DLL还会收到参数吗? 我在MFC版也发了此问题,
http://topic.csdn.net/u/20090106/15/2f7ce821-9df6-4df8-ad47-b8f25c7ec5c7.html
procedure TFormMain.BtnSendFileClick(Sender: TObject);
var
vStrFileName: String;
vFileName: array[0..256] of Char;
begin
if OpenDialog1.Execute then
begin
vStrFileName := ExtractFileName(OpenDialog1.FileName);
//vFileName := AllocMem(100);
SttPCopy(vFileName,vStrFileName);
SendFileThread(vFileName); //发送文件(文件名不包含路径)
end;
end;
写错一行
var
vStrFileName: String;
vFileName: PChar; //vFileName := AllocMem(100);
vFileName := pchar(vStrFileName); 1. 这里的vFileName: PChar; 用不用手工释放?它好像局部量数,我记忆中局部变量不用手工释放,疑问在此啊?
1.5 如果不用手工释放,它是何时释放的?
2. //vFileName := AllocMem(100); 这句加与不加在释放的时候有何不同????
//vFileName := AllocMem(100); 这句不能加,因为你是将vStrFileName的地址赋给vFileName的。
vFileName := pchar(vStrFileName);
SendFileThread(vFileName); //发送文件(文件名不包含路径) 不用手工释放。如果加上则应该这样写。
procedure TFormMain.BtnSendFileClick(Sender: TObject);
var
vStrFileName: String;
vFileName: pChar;
begin
if OpenDialog1.Execute then
begin
vStrFileName := ExtractFileName(OpenDialog1.FileName);
vFileName := GetMem(100);
StrPCopy(vFileName,vStrFileName);
SendFileThread(vFileName); //发送文件(文件名不包含路径)
FreeMem(vFileName);
end;
end;