我将一些代码从可执行项目移动到DLL项目。两者都是Delphi 7项目。
其中一个函数将文本文件加载到TStringList对象并迭代它以搜索某些信息。此函数(KeyManager
)由同一DLL内的另一个函数调用。
我遇到的问题是,当我在第二个(或更多)时间内调用此函数时,字符串列表为空(Count等于零)。 FileExists
告诉我文件在那里(我检查了它的内容,它就在那里)。第一次调用该函数时,列表填充正常并且代码可以正常工作。为了让它再次起作用,我必须完成该过程并再次执行它。
将dll静态加载到进程中。
我不知道如何解决这个问题,因为我不知道是什么导致了这个问题。这段代码曾经在EXE应用程序中实现时工作,所以我想这与在DLL中实现它有关。
Bellow是失败的代码。删除的部分未执行,因为keyStrings.Count
为0,因此for
循环不会执行。
var SLEKEYFILE : string = 'slekeys.keys';
function KeyManager(rw:TReadWriteOP; KeyType : TSleKeyType; var KeyRecord : TSleKeys) : integer;
var
line : integer;
keyFileName : string;
keyStrings : TStringList;
keyFile : file;
lineKeyId : Word;
lineKeyType : byte;
index : integer;
temp,temp2 : ansistring;
RecordStr : ansistring;
reqKeyId : integer;
begin
keyFileName := SLEKEYFILE;
if not FileExists(keyFileName) then
begin
// File does not exist. Create.
AssignFile(keyFile, keyFileName);
Rewrite (keyFile);
CloseFile(keyFile);
end; // not File exists
keyStrings := TStringList.Create;
try
keyStrings.LoadFromFile(keyFileName); // <<-- Only works the first time called
if rw = OpRead then
begin
Result := $01 OR $02; // keys are not found
for line := 0 to keyStrings.Count-1 do
begin
// Sanity check
if Length(keyStrings[line]) = 0 then continue;
// Other information is read. This part is not executed because Count is 0 the second time KeyManager() is called.
end; // for
end
else // rw
begin // inserção da chave
// Insert information in file - not executed/relevant to the question
end; // rw
finally
keyStrings.Free;
end; // try
end;
我无法确定我是否做了明显错误的事情。如何解决此问题,并使LoadFromFile过程始终有效?