Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation on 12/14/22 in all areas

  1. It has been quite some time when I made this certificate. Actually, I was one of the first people doing it. The questions were quite challenging, especially because they required deep knowledge of most of the Enterprise features of Delphi. In the past years there were many additions to these (e.g. FireDAC, REST, Mobile etc.) and I doubt that the questions kept the same over the time. I cannot say anything about the current state and level of difficulty of the exam.
  2. Hi... ...really? There are two types of exam: Delphi Certified Developer: via online / browser ... i have (exam time: ~1 hour) Delphi Master Certified Developer: ... Uwe has (exam: i dont know time and where) https://www.embarcadero.com/resources/embarcadero-certification-center ...what you want?
  3. Lars Fosdal

    Regex help please..

    You have a problem. You apply RegEx to solve the problem. You now have two problems.
  4. In case this of use to anyone: Quite often you find a bug in Delphi RTL and you come up with a fix. Patching involves replacing the RTL procedure with a new patched one. To do that you can use your favorite patching routine or library (I use Detours), but you need the address of the original function/method. a) Patching a non-virtual public method This is quite straight-forward: type TMethodType = procedure ... of object function GetAddress: Pointer; var MethodPtr : TMethodType; begin MethodPtr := TRTLClass(nil).PublicMethod; Result := TMethod(MethodPtr).Code; end; Note the type cast TRTLClass(nil). b) Patching a virtual public method If for example PublicMethod is virtual the above type cast TRTLClass(nil) with result in access violation, since to resolve the virtual method you need to access Self which is nil. You could create a class instance and use that instead of TRTLClass(nil), but apart from not being elegant, in some cases this has side-effects (for example it may require a valid windows handle). The trick is described in this Stackoverflow question. function GetAddress: Pointer; var VMT : NativeInt; MethodPtr: TMethodType; begin VMT := NativeInt(TRTLClass); MethodPtr := TRTLClass(@VMT).PublicMethod; Result := TMethod(MethodPtr).Code; end; This is based on two facts. A class is a pointer to the Virtual Method table (VMT) and an Object structure has as the first field a pointer to the VMT of its class. c) Patching a private virtual method The trick this time involves using a class helper to access the private method of the TRTLClass type TPrivateMethodType = procedure ... of object; TRTLClassHookFix = class helper for TRTLCLass function GetPriveMethodAddr: Pointer; end; function TRTLClassHookFix.GetPriveMethodAddr: Pointer; var VMT : NativeInt; MethodPtr: TPrivateMethodType; begin // Adjust Self to point to the VMT VMT := NativeInt(TRTLCLass); Self := TRTLCLass(@VMT); with Self do MethodPtr := PrivateMethod; Result := TMethod(MethodPtr).Code; end; That's it.
  5. FredS

    Code completion failure

    The myth of a working LSP server.. since before Godzilla 🙂
  6. RDP1974

    D11.2 + FireDAC + MySQL 64 bit not working

    hi, I have many 4.0 industry software made in D11x and MySQL in Firedac I use libmysql.dll from the MySQL folder, this should be inserted in TFDPhysical vendorlib property under Windows Server 2016, 2019, 2022 works fine you have to setup microsoft visual c runtime before https://learn.microsoft.com/it-it/cpp/windows/latest-supported-vc-redist?view=msvc-170
  7. Here it says it's valid for only 2 years : https://www.embarcaderoacademy.com/p/delphi-developer-certification-premium-package Even worse than AWS 3 years.
  8. programmerdelphi2k

    File Manifest : changing it does not load new settings.

    maybe clearing "prefetch" infos? in "RUN" (Win+R) type "Prefetch" and see the folder with it
  9. The Developer certificate is only valid for a limited time... Mine has already expired. Although I have been working in software development for years. Is it still like this? With the Master too?
  10. Why is it unfair? It is a certificate given by Embarcadero. It is expected to be about their own tools and not about any thrid-party ones. After all, everyone is free to take that exam or leave it if feeling uncomfortable with it.
  11. Fr0sT.Brutal

    Exception call stacks on Windows with only a few LOCs

    Update: * Total redesign of reading. Minimized string allocations which allowed to gain x3,5 perf boost on MAP file loading + Demo project: add comments and messages, add sample of random callstack, add demo for GetMethodName https://github.com/Fr0sT-Brutal/Delphi_StackTraces
  12. The idea behind probably is that a Delphi Master Developer should to be proficient in these, too. After all, they are part of Delphi Enterprise. Perhaps that is exactly what makes the difference: Being experienced in all or at least most parts of Delphi, not only some core parts. Of course, I don't know the actual reasons.
  13. Yeah, we got it for several years already. 0.9l milk, 900g rice, even 9-egg pack. And finally what I consider the absolute evil - 0.4l beer!
  14. How much experience do you have? That will determine how you should prepare. The embarcadero website says: and... So where do you fit into this? I do not have any idea how the certification covers material but I think 6 months might not be enough for someone with no experience. But there are some bright people out there that might even do it in less time. But remember that the idea behind any studying is to encourage learning and recall of that material and not just to pass a test. Ask yourself if your motives are clear. I have been programming in Delphi for many many years and I am still learning every day and I am on this website and StackOverflow constantly to see what else I can learn.
  15. Fr0sT.Brutal

    Zeos on Delphi 11.2

    Just try packages for 10.x Official GH repo is https://github.com/marsupilami79/zeoslib
  16. corneliusdavid

    Regex help please..

    I think I would split the string on semicolons and run the regex on each individual address. function ValidEmail(const EmailAddress: string): Boolean; const EMAIL_REGEX = '^((?>[a-zA-Z\d!#$%&''*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])' + '[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)' + '(?>\.?[a-zA-Z\d!#$%&''*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])' + '[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]' + '{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d))' + '{4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\' + '[\x01-\x7f])+)\])(?(angle)>)$'; var Emails: TStringList; begin Result := True; Emails := TStringList.Create; try Emails.Delimiter := ';'; Emails.StrictDelimiter := True; Emails.DelimitedText := EmailAddress; for var i := 0 to Emails.Count - 1 do if not IsMatch(Emails[i], EMAIL_REGEX) then begin Result := False; Break; end; finally Emails.Free; end; end;
×