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 清楚地说明了为什么你的代码不起作用(强调添加):
如果您检查API函数的返回值并在失败时调用GetLastError,您可能已经能够自己推断出错误的原因,就像文档建议的那样. 您可以将设置存储在资源中,但不能将设置存储在您尝试存储其设置的程序的资源中.现在我们已经确定你不允许在程序本身存储设置,你也可以放弃资源的想法,并使用更常规的方法在外部位置存储设置,例如注册表,INI文件,或者其他什么.如果您发现外部位置尚未进行任何设置,您可能仍希望从资源中读取一组默认设置,如全新安装后可能会发生的那样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |