Jump to content

Lars Fosdal

Administrators
  • Content Count

    3416
  • Joined

  • Last visited

  • Days Won

    113

Everything posted by Lars Fosdal

  1. My workaround for generic classes is a non-generic base class. The challenge is always how to wrap stuff in such a way that you can get done what you need get done with the methods and properties defined in the abstract base class. I.e. Keep the T stuff out of the methods as far as possible. Rough example... type TxQuery = class abstract protected function GetSQL: TStrings; virtual; abstract; function GetDataSet: TDataSet; virtual; abstract; public constructor Create; virtual; // doesn't really need to do anything but exist procedure Execute; virtual; abstract; property SQL: TStrings read GetSQL; property DataSet: TDataSet read GetDataSet; end; TxQuery<T: TFDDataSet> = class(TxQuery) private FiQuery: T; protected // overrides property iQuery: T read FiQuery write FiQuery; public // overrides constructor Create; override; // initialize the T stuff end; TxQueryClass = class of TxQuery;
  2. Lars Fosdal

    OmniPascal: Auto-Implementation of methods not working

    Perhaps file an issue here: https://bitbucket.org/Wosi/omnipascalissues/issues
  3. BTW: Did you try CopyFileEx? https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-copyfileexa
  4. DoCopy calls WinAPI.Windows function CopyFile; external kernelbase name 'CopyFileW'; So, your guess is good as mine...
  5. The silent flag for the shell copy makes it run nicely in services and console apps - but yeah... no progress callback. LOL at the last comment 😄
  6. Edit: Doh - as always I misread the original post... You wanted a callback for progress, I offered a progress bar 😛 Off to top up the coffee mug... I use the native Windows one. It deals well with UNC paths, access rights, network glitches, etc. In addition, I touch up the target file date to ensure it matches the original file date. Code was yanked from a utility unit, so there may be missing or superfluous units or functions. uses System.SysUtils, WinAPI.Windows, WinAPI.mmSystem, Winapi.ShlObj, Winapi.ShellApi, Winapi.ShFolder; function ShellFileOperation(const hHandle: THandle; const aSourceFiles: string; aTargetDirectory: string; aFunc:UInt; aFlags: FileOp_Flags; ProgressText:String):Integer; var shellinfo: TSHFileOpStruct; rc: Integer; begin FillChar(ShellInfo, SizeOf(ShellInfo), 0); shellinfo.wnd := hHandle; shellinfo.wFunc := aFunc; shellinfo.fFlags := aFlags; shellinfo.pFrom := PChar(aSourceFiles+#0); shellinfo.pTo := PChar(aTargetDirectory+#0); if ProgressText <> '' then shellinfo.lpszProgressTitle := pChar(ProgressText) else Shellinfo.lpszProgressTitle := pChar('Copying'); rc := SHFileOperation(shellinfo); if (rc = 0) and shellinfo.fAnyOperationsAborted then rc := -1; Result := rc; end; function FileCopyProgress(const SourceFile, TargetFile: String; const ProgressText: String; const AppWinHandle: THandle; const Silent:Boolean): Boolean; var rc : Integer; Flags: UInt; aDate: TDateTime; awh: hWnd; begin FileAge(SourceFile,aDate); Flags := FOF_NOCONFIRMATION OR FOF_FILESONLY OR FOF_ALLOWUNDO; if Silent then begin Flags := Flags OR FOF_SILENT OR FOF_NOERRORUI OR FOF_NOCONFIRMMKDIR; awh := 0; end else awh := hWnd(AppWinHandle); rc := ShellFileOperation(awh, SourceFile, TargetFile, FO_COPY, Flags, ProgressText); DebugOut('ShellFileCopy ' + SourceFile + ' -> ' + TargetFile + ' returns rc='+IntToStr(rc)); Result := (rc = 0); if Result then begin Sleep(250); FileSetDate(TargetFile, DateTimeToFileDate(aDate)); end; end;
  7. Interesting read. About avoiding RTTI as much as possible - how is this achieved? Edit: Or rather - what tradeoffs were necessary to eliminate the RTTI dependencies?
  8. Isn't that basically the same message as the one that Herb Sutter presented years ago (2007)? “Machine Architecture: Things Your Programming Language Never Told You” Slides: https://nwcpp.org/talks/2007/Machine_Architecture_-_NWCPP.pdf
  9. Lars Fosdal

    Apple XCode Cloud

    https://developer.apple.com/xcode-cloud/ You'll still need a Mac, but you don't need to own every Apple device.
  10. The VMware thing popped up in my feed. My gut reaction was to bring it forward. I agree - PS Remoting has risks. But - if an intruder is already inside the domain - you are already in trouble. We only allow it for some specific domain users and it is explicitly enabled for specific machines. The initiating host must be inside the domain.
  11. VMware users, patch now! https://www.bleepingcomputer.com/news/security/attackers-are-scanning-for-vulnerable-vmware-servers-patch-now/
  12. Lars Fosdal

    READ_SMS permission not requested

    https://google-developer-training.github.io/android-developer-phone-sms-course/Lesson 2/2_p_sending_sms_messages.html Has SMS access been enabled for the app in the Android settings? Also, best practices: https://stackoverflow.com/questions/32814922/why-does-android-ignore-read-sms-permission
  13. Lars Fosdal

    'as' operator??

    Ref.1: The as operator is a checked typecast. Let's say that you have a method that takes a TObject as parameter aInstance. The difference between a simple typecast and a checked typecase is that var Unchecked := TMyClass(aInstance); will never complain, while var Unchecked := aInstance as TMyClass; will raise an exception if aInstance is not a TMyClass Also see the is operator which can be used to validate the type before the cast. if aInstance is TMyClass then (aInstance as TMyClass).SomeTMyClassMethod;
  14. Most of the experts there seem to be self-appointed.
  15. Sounds like bullshit to me. No random crashes that we didn't cause ourselves that I can remember, and I've used every Delphi version there is, on most of the Windows versions there has been.
  16. There is one unmentioned drawback to VMs. The more you have, the more you need to keep updated and patched. That is the price you pay for flexibility.
  17. The only thing that is slow in my VMs is 3D gfx, but since I don't rely on those - it is not a problem.
  18. MS submitted changes to the Linux kernel in June 2020 that would allow running Hyper-V hosting on Linux. Not sure if this is present in any current Linux release yet.
  19. 3D GPU performance is a mixed bag, imo - but why would you test that in a VM? You'd remote debug that from the VM on a physical machine. The CPU is virtualized, so I guess the only time you'd get into trouble is if you try to run something like a VM with 8 cores on a 4 core machine or use more memory than is physically present. I would expect Hyper-V to simply cut down to the max avail if exceeded.
  20. Lars Fosdal

    TJsonTextWriter out of memory

    Well, Delphi 32-bit stops at 2Gb. If you need more memory, I suggest a 64-bit app.
  21. Lars Fosdal

    TArray<T> helper

    @Tommi Prami It would have been awesome if we could do helpers for generics. We can't.
  22. I used paid VMWare workstation for years. About a year ago, I switched to Hyper-V and never regretted doing so.
  23. Then there is this: https://www.microsoft.com/en-us/microsoft-365/blog/2021/04/28/beyond-calibri-finding-microsofts-next-default-font/
×