Jump to content

Remy Lebeau

Members
  • Content Count

    2743
  • Joined

  • Last visited

  • Days Won

    121

Remy Lebeau last won the day on January 15

Remy Lebeau had the most liked content!

Community Reputation

1458 Excellent

About Remy Lebeau

Technical Information

  • Delphi-Version
    Delphi 12 Athens

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Remy Lebeau

    Delphi + Windows + isWine

    You can't, without patching the EXE or recompiling the RTL. Nor should you be doing so. You should be complaining to CrowdStrike instead. And code-signing your EXE.
  2. Remy Lebeau

    Delphi + Windows + isWine

    The RTL looks for Wine as part of its check to know whether it can use the Win32 API to access TLS (thread local storage) data, instead of using direct access to the GS register.
  3. Those settings only affect WinInet/WinHTTP (which Indy doesn't use), they have no effect on OpenSSL.
  4. This is documented behavior: https://docwiki.embarcadero.com/RADStudio/en/Anonymous_Methods_in_Delphi
  5. Remy Lebeau

    Pointer arithmetic question

    It is actually legal code and does compile: https://onlinegdb.com/AYf40CsUy This kind of reverse syntax is not commonly used, but it does have its uses, and the C++ standards allows it. For an array, arr[2] is the same as *(arr+2), and thus 2[arr] is the same as *(2+arr).
  6. Remy Lebeau

    Retrieve value of INSERT ... RETURNING ...?

    Feel free to file a bug report with Embarcadero.
  7. Remy Lebeau

    Retrieve value of INSERT ... RETURNING ...?

    ExecSQL() is not supposed to be used for SQL statements that return data. You normally have to use Open() instead, or set Active=true. That being said, RETURNING values can be accessed using an output parameter, which ExecSQL() should be able to fill. Depending on the driver you are using, the syntax may differ slightly, eg: ... ExecuteQuery(SqlQuery, false); DatabaseId := SqlQuery.ParamByName('RET_database_id').AsInteger; Or: ... with TParam(SqlQuery.Params.Add) do begin Name := 'database_id'; DataType := ftInteger; ParamType := ptOutput; end; ExecuteQuery(SqlQuery, false); DatabaseId := SqlQuery.ParamByName('database_id').AsInteger;
  8. Remy Lebeau

    Pointer arithmetic question

    In C++, that example would look like this: #include <iostream> int main() { int value = 42; int *p_int = &value; std::cout << "p_int points to " << *p_int << std::endl; // 42 int arr[] = {100, 101, 102}; p_int = &arr[1]; std::cout << "p_int points to " << *p_int << std::endl; // 101 ++p_int; std::cout << "p_int points to " << *p_int << std::endl; // 102 ++p_int; std::cout << "p_int points to " << *p_int << std::endl; // (OUT OF BOUNDS - UNDEFINED BEHAVIOR!) }
  9. Remy Lebeau

    TLS v1.3

    Such a version has NOT been released yet. Still a work in progress. The next Indy version that is pending release (10.7) will be splitting off all OpenSSL support into a new package, IndyTLSOpenSSL, as an add-on to the main Indy packages. It has its own repo: https://github.com/IndySockets/IndyTLS-OpenSSL v1.0 will focus on backwards compatibility as users update their existing projects to include this new package without changing the rest of their code. Then v2.0 will be for adding OpenSSL 3.x. In the meantime, there are a few 3rd party projects already available now that bring OpenSSL 3.x to the current Indy. You cannot have multiple versions installed together. The GitHub version is not compatible as-is with the default bundled version. You will have to use one or the other. I can't answer that. Each 3rd party project that has been released so far has its own way of doing things. Use what is appropriate for whatever project you decide to use. What will end up in the new IndyTLSOpenSSL package is not finalized yet.
  10. Remy Lebeau

    Enable Discussions on github ?

    Is it really worth it?
  11. Remy Lebeau

    openssl dll problem

    You can't normally have multiple versions of the DLLs with the same file names loaded at the same time. But, in this case, you can't just rename the DLLs either, because IIRC one of them depends on the other using the original filename. You could try wrapping the old unit code inside of an Activation Context so it can use the older DLLs while the rest of your app uses the newer DLLs. But, this is a pretty advanced technique. Otherwise, if you can't update the older unit to use the newer DLLs, then you will probably be best off splitting the two codes into separate EXEs with different DLL dependancies.
  12. That code can be simplified: procedure TForm1.PageControl1Change(Sender: TObject); var sheet : TTabSheet; frame : TFrame2; begin sheet := PageControl1.ActivePage; frame := sheet.Components[0] as TFrame2; StrLines.Assign(frame.Memo.Lines); ListBox1.Items.Assign(frame.Memo.Lines); end;
  13. On a side note - the TFrame should have an Owner assigned, not just a Parent, eg: memo := tframe2.Create(TabSheet);
  14. Remy Lebeau

    Multiple similar components

    The most direct/efficient way is to put the Memo object pointers into an array or list, and then use the integer as an index into that container.
  15. Remy Lebeau

    How to get the quotation marks to show

    For the benefit of others who will read this discussion in the future... You are simply missing the closing outer quote: cout << "Looking for the index position of the word \"own\""; ^ You might also consider using your 'word' variable: cout << "Looking for the index position of the word \"" << word << "\""; Also note that C++14 and later has the std::quoted stream manipulator: #include <iomanip> ... cout << "Looking for the index position of the word " << std::quoted(word);
×