delphi – 如何在资源中存储设置

前端之家收集整理的这篇文章主要介绍了delphi – 如何在资源中存储设置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在我的应用程序的资源中存储一些设置
但失败了
我不想使用ini文件注册方法
我正在使用此代码
var
    data :string;

  procedure WriteSettings(ServerFile: string; Settings: string);
    var
     ResourceHandle: THandle;
     pwServerFile: PWideChar;
    begin
     GetMem(pwServerFile,(Length(ServerFile) + 1) * 2);
     try
       StringToWideChar(ServerFile,pwServerFile,Length(ServerFile) * 2);
       ResourceHandle := BeginUpdateResourceW(pwServerFile,False);
       UpdateResourceW(ResourceHandle,MakeIntResourceW(10),'SETTINGS',@Settings[1],Length(Settings) + 1);
       EndUpdateResourceW(ResourceHandle,False);
     finally
       FreeMem(pwServerFile);
     end;
    end;
    function ReadSettings(ServerFile: string): string;
    var
      ServerModule: HMODULE;
      ResourceLocation: HRSRC;
      ResourceSize: dword;
      ResourceHandle: THandle;
      ResourcePointer: pointer;
    begin
      ServerModule := LoadLibrary(pchar(ServerFile));
      try
        ResourceLocation := FindResource(ServerModule,RT_RCDATA);
        ResourceSize := SizeofResource(ServerModule,ResourceLocation);
        ResourceHandle := LoadResource(ServerModule,ResourceLocation);
        ResourcePointer := LockResource(ResourceHandle);
        if ResourcePointer <> nil then
        begin
          SetLength(Result,ResourceSize - 1);
          CopyMemory(@Result[1],ResourcePointer,ResourceSize);
          FreeResource(ResourceHandle);
        end;
      finally
        FreeLibrary(ServerModule);
      end;
    end;
  procedure TForm1.saveClick(Sender: TObject);
begin
    writesettings(paramastr(0),'true');  
end;
 procedure TForm1.ReadClick(Sender: TObject);
begin
   data:=readsettings(paramstr(0));  
end;

 begin
   if data='true' then checkBox1.checked:=true;
 end

但是存储我写的资源:
还有其他更好的选择吗?
请帮忙

解决方法

The documentation for BeginUpdateResource清楚地说明了为什么你的代码不起作用(强调添加):

pFileName [in]

LPCTSTR

The binary file in which to update resources. An application must be able to obtain write-access to this file; the file referenced by pFileName cannot be currently executing. If pFileName does not specify a full path,the system searches for the file in the current directory.

如果您检查API函数的返回值并在失败时调用GetLastError,您可能已经能够自己推断出错误的原因,就像文档建议的那样.

您可以将设置存储在资源中,但不能将设置存储在您尝试存储其设置的程序的资源中.现在我们已经确定你不允许在程序本身存储设置,你也可以放弃资源的想法,并使用更常规的方法在外部位置存储设置,例如注册表,INI文件,或者其他什么.如果您发现外部位置尚未进行任何设置,您可能仍希望从资源中读取一组默认设置,如全新安装后可能会发生的那样.

猜你在找的Delphi相关文章