Jump to content

shineworld

Members
  • Content Count

    321
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by shineworld

  1. shineworld

    MAP2PDB - Profiling with VTune

    I'm not an expert with PDB but that is what I've done and now seems to work: - Installed the latest version of VTune Profiler (2023.1.0). - Changed the original amplxe_media140.dll with an old version from Jan Rysavy (previous posts). - Enabled map in Detailed mode. - Compiled a project of 1.359.947 code lines (including library sources) which generate a map file of 49.696.190 bytes. - Executed map2pdb.exe rosettacncpph1.64.map -bind -v D:\x\develop\qem\rosetta_cnc_1>map2pdb.exe rosettacncpph1.64.map -bind -v map2pdb - Copyright (c) 2021 Anders Melander Version 2.8.0 Constructed a new PDB GUID: {F2D8CB4B-DA08-4BBD-A399-DBC449AF1364} Output filename not specified. Defaulting to rosettacncpph1.64.pdb Reading MAP file - Segments - Modules - Symbols Warning: [116390] Failed to resolve symbol to module: [0004:00000000000002C8] SysInit.TlsLast Warning: [116392] Failed to resolve symbol to module: [0003:00000000FE7F6000] SysInit.__ImageBase - Line numbers Collected 3.996 modules, 182.925 symbols, 525.223 lines, 985 source files Constructing PDB file - Collecting source file names - Module streams - Strings stream - PDB Info stream - TPI stream - Symbols stream - DBI stream - IPI stream - Finalizing PDB file - 9.068 blocks written in 3 intervals PE filename not specified. Defaulting to rosettacncpph1.64.exe Patching PE file - PE32+ image (64-bit) - Adding .debug section. - PDB file name has been stored in debug data. - PE file has been updated. Elapsed time: 00:00:00.895 This has generated a PDB file of 37.142.528 bytes - Started profiling of EXE in VTune profiler which generates this log at the profiling stop: Data collection is completed successfully May 22 2023 18:06:59 The result file 'XXX\r001hs\r001hs.vtune' is successfully created and added to the project . Finalization completed with warnings May 22 2023 18:08:33 Result finalization has completed with warnings that may affect the representation of the analysis data. Please see details below. Cannot locate debugging information for file `C:\WINDOWS\System32\msvcrt.dll'. Cannot locate debugging information for file `C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.1110_none_60b5254171f9507e\COMCTL32.dll'. Cannot locate debugging information for file `C:\WINDOWS\WinSxS\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.19041.2251_none_91a40448cc8846c1\gdiplus.dll'. Cannot locate debugging information for file `C:\WINDOWS\SYSTEM32\ntdll.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\GDI32.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\SETUPAPI.DLL'. Cannot locate debugging information for file `C:\WINDOWS\System32\KERNEL32.DLL'. Cannot locate debugging information for file `C:\WINDOWS\System32\cfgmgr32.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\gdi32full.dll'. Cannot locate debugging information for file `C:\Program Files\Bitdefender\Endpoint Security\bdhkm\dlls_266262988153465131\bdhkm64.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\user32.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\combase.dll'. Cannot locate debugging information for file `C:\Program Files\Bitdefender\Endpoint Security\atcuf\dlls_266575548366517634\atcuf64.dll'. Cannot locate debugging information for file `C:\WINDOWS\system32\mswsock.dll'. Cannot locate debugging information for file `C:\WINDOWS\system32\uxtheme.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\ole32.dll'. Cannot locate debugging information for file `C:\WINDOWS\SYSTEM32\opengl32.dll'. Cannot locate debugging information for file `C:\WINDOWS\SYSTEM32\DEVOBJ.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\KERNELBASE.dll'. Cannot locate debugging information for file `C:\WINDOWS\SYSTEM32\TextShaping.dll'. Cannot locate debugging information for file `C:\Windows\System32\msxml6.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\WS2_32.dll'. Cannot locate debugging information for file `C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_c1a085cc86772d3f\nvoglv64.dll'. Cannot locate debugging information for file `C:\WINDOWS\SYSTEM32\HID.DLL'. Cannot locate debugging information for file `C:\WINDOWS\System32\win32u.dll'. Cannot locate debugging information for file `C:\Program Files (x86)\Intel\oneAPI\vtune\latest\bin64\tpsstool.dll'.: And all symbols project symbols are visible (not for below list of DLL):
  2. shineworld

    MAP2PDB - Profiling with VTune

    Seems to work.... Original version raise error on PDB file reading
  3. shineworld

    MAP2PDB - Profiling with VTune

    Can you attach the working DLL to try ?
  4. shineworld

    MAP2PDB - Profiling with VTune

    I've tried to find a way to download the older version (2022.4.1) but no way found on the intel VTune pages....
  5. shineworld

    MAP2PDB - Profiling with VTune

    Incredible tool, congrats. I've tried to use it with Sydney 10.4.1 and VTune 2023.1.0. Unfortunately, I was not able to get the function as name, I get only func addresses: I've tried with: D:\x\develop\qem\rosetta_cnc_1>map2pdb.exe rosettacncpph1.64.map -bind map2pdb - Copyright (c) 2021 Anders Melander Version 2.8.0 and also with: D:\x\develop\qem\rosetta_cnc_1>map2pdb.exe -bind rosettacncpph1.64.map map2pdb - Copyright (c) 2021 Anders Melander Version 2.8.0 Map is set to Detailed on Sydney 10.4.1: D:\x\develop\qem\rosetta_cnc_1>map2pdb.exe rosettacncpph1.64.map -bind -v map2pdb - Copyright (c) 2021 Anders Melander Version 2.8.0 Constructed a new PDB GUID: {5D8591F1-8F38-4E7B-BAE4-1BB55536733F} Output filename not specified. Defaulting to rosettacncpph1.64.pdb Reading MAP file - Segments - Modules - Symbols Warning: [116390] Failed to resolve symbol to module: [0004:00000000000002C8] SysInit.TlsLast Warning: [116392] Failed to resolve symbol to module: [0003:00000000FE7F6000] SysInit.__ImageBase - Line numbers Collected 3.996 modules, 182.925 symbols, 525.223 lines, 985 source files Constructing PDB file - Collecting source file names - Module streams - Strings stream - PDB Info stream - TPI stream - Symbols stream - DBI stream - IPI stream - Finalizing PDB file - 9.068 blocks written in 3 intervals PE filename not specified. Defaulting to rosettacncpph1.64.exe Patching PE file - PE32+ image (64-bit) - Adding .debug section. - PDB file name has been stored in debug data. - PE file has been updated. Elapsed time: 00:00:00.874 I hope you have a simple solution to my possible mistakes.
  6. shineworld

    Community license

    Your argument lines up right doesn't make a dent. In fact, beyond describing the reasons, we went no further and paid what was due. At the company there are no constraints on what one does in one's free time between lunch breaks, and the company has been favorably disposed to those who devote that time to opensource projects that do not conflict with company business, so I have never had a problem collaborating with the Linux project (support embeded boards), or .net-based projects. At the end of it all, I left the open world of Delphi and devote myself to other projects with Linux, FreePascal and .NET.
  7. shineworld

    Community license

    On the use of the community license, my advice is to be very careful about what you do. I bring them my case. At home, on my personal notebook I had installed the community version of Delphi, it was the Rio, to work on an open-source project, GLSCENE. Since I have little time at home to develop I, unhappily, thought of taking advantage of the hour and a half of free time for lunch break I have at the office, to continue development on my personal notebook BUT attached to the company WIFI network to access the sources, do push and everything else. Well after a month or so I got a tethered notification from Embarcadero, that according to their logs, Community sends logs of what files you compile, when you compile, what network and domain you are working on, my company was not using Community intebitually for application development while earning over 5000E. The email came directly to the company by going back to the company's internet domain data. There was no way to make it clear, even after sending the project report I worked on, that it was not of company interest but personal, about it being my personal laptop, etc. Moral of the story, they gave me a number of days to purchase the full Architect product (the most expensive formula) or legal action would start. The company covered the cost, thankfully. Be careful where you connect with terminals.... Since then never again a Community product and since I personally cannot buy Licensed products at those prices, I now participate in open-source projects with other environments and languages.
  8. shineworld

    Update to 10.4.2

    Hi all, my subscription is expired but in GetIt Package Manager I notice that 10.4.2 Installer for earlier 10.4 Releases 1.0 is active to Install: Does it mean that regardless of the expired subscription program I can still upgrade the system from 10.4.1 to 10.4.2 ? Before starting the installation and to avoid losing a still working development environment I ask for info from the experts. Thanks
  9. shineworld

    Update to 10.4.2

    I will do surely. At the moment, I'm re-installing by zero the uninstalled 10.4.1... I can't stop development, unfortunately!
  10. shineworld

    Update to 10.4.2

    Unfortunately does not work 😞 I've started the update downloaded from Getit, which required a full uninstall to start. After full uninstall at the start of installation I got this message: So I've lost my primary development tool... Damn!
  11. shineworld

    Modify bitmap of FMX Image object

    Mmmmm.... seems that Canvas.FillText can't be used... I'm not a guru on Python and DelphiFMX so I can mistake in anything but debugging: >>> import DelphiFMX as fmx >>> img = fmx.Image(None) >>> bmp = img.Bitmap >>> bmp.Handle >>> bmp.Width = 200 >>> bmp.Height = 200 >>> c = bmp.Canvas >>> r = fmx.RectF(0,0,10,10) >>> c.FillText(r, 'hello', True, 1, [], ['Center'], ['Center']) the FindMethod "find" FillRect and first ARect parameter in FMX is a Record when Python call to c.FillText manages R as a class so the arguments check stops at the first argument with an error. Waiting for GURU info 🙂
  12. shineworld

    Modify bitmap of FMX Image object

    Seems TTextAlign is not available in DelphiFMX library : Microsoft Windows [Versione 10.0.19045.2965] (c) Microsoft Corporation. Tutti i diritti sono riservati. P:\>pip list Package Version ---------------------- ------------ delphifmx 1.0.6 NameError: name 'TTextAlign' is not defined Traceback (most recent call last): File "D:\x\develop\qem\cnc_api_client_core_1\python\api_client_fmx_demo\api_client_fmx_demo_desktop_view.py", line 692, in __on_timer_update canvas.FillText(r, 'hello world', False, 1, [], TTextAlign.Center, TTextAlign.Center) ^^^^^^^^^^ NameError: name 'TTextAlign' is not defined *** Remote Interpreter Reinitialized *** >>> import delphifmx as fmx >>> dir(fmx) ['Abort', 'Action', 'ActionList', 'AdapterListView', 'AniIndicator', 'AppearanceListView', 'Application', 'Arc', 'ArcDial', 'BaseBindScopeComponent', 'BaseLinkingBindSource', 'BaseObjectBindSource', 'BaseValueRange', 'BasicAction', 'BasicBindComponent', 'BindComponentDelegate', 'BindingsList', 'BitmapTrackBar', 'Bounds', 'BufferedFileStream', 'BufferedLayout', 'Button', 'BytesStream', 'Calendar', 'CalloutPanel', 'CalloutRectangle', 'CameraComponent', 'CaretRectangle', 'CheckBox', 'CheckColumn', 'Circle', 'Collection', 'ColorBox', 'ColorButton', 'ColorComboBox', 'ColorListBox', 'ColorPanel', 'ColorPicker', 'ColorQuad', 'Column', 'ComboBox', 'ComboColorBox', 'ComboEdit', 'ComboEditBase', 'CommonCustomForm', 'Component', 'ContainedAction', 'ContainedActionList', 'ContainedBindComponent', 'Control', 'ControlSize', 'CornerButton', 'CreateComponent', 'CurrencyColumn', 'CustomAction', 'CustomActionList', 'CustomBindingsList', 'CustomBufferedLayout', 'CustomButton', 'CustomCalendar', 'CustomColorComboBox', 'CustomComboBox', 'CustomComboEdit', 'CustomControlAction', 'CustomCornerButton', 'CustomDateEdit', 'CustomDateTimeEdit', 'CustomEdit', 'CustomEditBox', 'CustomForm', 'CustomGrid', 'CustomLinkControlToField', 'CustomLinkListControlToField', 'CustomLinkPropertyToField', 'CustomListBox', 'CustomListView', 'CustomMediaCodec', 'CustomMediaPlayerAction', 'CustomMemo', 'CustomMemoryStream', 'CustomMultiView', 'CustomNumberColumn', 'CustomPath', 'CustomPopupForm', 'CustomPopupMenu', 'CustomPresentedFramedScrollBox', 'CustomPresentedFramedVertScrollBox', 'CustomPresentedHorzScrollBox', 'CustomPresentedScrollBox', 'CustomPresentedVertScrollBox', 'CustomPrototypeBindSource', 'CustomScrollBox', 'CustomSwitch', 'CustomTimeEdit', 'CustomTrack', 'CustomValueRange', 'CustomValueRangeAction', 'CustomViewAction', 'DateColumn', 'DateEdit', 'DateTimeColumn', 'DateTimeColumnBase', 'DelphiDefaultContainer', 'DelphiDefaultIterator', 'DelphiMethod', 'DialogService', 'Edit', 'Ellipse', 'Expander', 'ExpanderButton', 'FMXBindNavigateAction', 'FMXBindNavigateApplyUpdates', 'FMXBindNavigateCancel', 'FMXBindNavigateCancelUpdates', 'FMXBindNavigateDelete', 'FMXBindNavigateEdit', 'FMXBindNavigateFirst', 'FMXBindNavigateInsert', 'FMXBindNavigateLast', 'FMXBindNavigateNext', 'FMXBindNavigatePost', 'FMXBindNavigatePrior', 'FMXBindNavigateRefresh', 'FileExit', 'FileHideApp', 'FileHideAppOthers', 'FileStream', 'FloatColumn', 'FlowLayout', 'FmxObject', 'Form', 'Frame', 'FramedScrollBox', 'FramedVertScrollBox', 'GetProcessDpiAwareness', 'GlyphColumn', 'GradientEdit', 'Grid', 'GridLayout', 'GridPanelLayout', 'GroupBox', 'HandleStream', 'HintAction', 'HorzScrollBox', 'IDABORT', 'IDCANCEL', 'IDCLOSE', 'IDCONTINUE', 'IDHELP', 'IDIGNORE', 'IDNO', 'IDOK', 'IDRETRY', 'IDTRYAGAIN', 'IDYES', 'Image', 'ImageColumn', 'ImageControl', 'IntegerColumn', 'IsDpiAware', 'Label', 'Layout', 'Line', 'LinkControlDelegate', 'LinkControlToField', 'LinkControlToFieldDelegate', 'LinkListControlToField', 'LinkPropertyToField', 'LinkPropertyToFieldDelegate', 'ListBox', 'ListBoxItem', 'ListView', 'ListViewBase', 'MB_ABORTRETRYIGNORE', 'MB_APPLMODAL', 'MB_DEFBUTTON1', 'MB_DEFBUTTON2', 'MB_DEFBUTTON3', 'MB_DEFBUTTON4', 'MB_HELP', 'MB_ICONASTERISK', 'MB_ICONERROR', 'MB_ICONEXCLAMATION', 'MB_ICONHAND', 'MB_ICONINFORMATION', 'MB_ICONQUESTION', 'MB_ICONSTOP', 'MB_ICONWARNING', 'MB_NOFOCUS', 'MB_OK', 'MB_OKCANCEL', 'MB_RETRYCANCEL', 'MB_SYSTEMMODAL', 'MB_TASKMODAL', 'MB_YESNO', 'MB_YESNOCANCEL', 'MainMenu', 'Media', 'MediaPlayer', 'MediaPlayerControl', 'MediaPlayerCurrentTime', 'MediaPlayerPlayPause', 'MediaPlayerStart', 'MediaPlayerStop', 'MediaPlayerValue', 'MediaPlayerVolume', 'Memo', 'MemoryStream', 'MenuBar', 'MenuItem', 'MultiView', 'NumberBox', 'Object', 'ObjectViewAction', 'OpenDialog', 'PaintBox', 'Panel', 'PascalInterface', 'PascalRecord', 'Path', 'PathLabel', 'Persistent', 'Pie', 'Point', 'PointF', 'Popup', 'PopupColumn', 'PopupMenu', 'Position', 'PresentedFramedScrollBox', 'PresentedFramedVertScrollBox', 'PresentedHorzScrollBox', 'PresentedListView', 'PresentedScrollBox', 'PresentedTextControl', 'PresentedVertScrollBox', 'ProgressBar', 'ProgressColumn', 'PrototypeBindSource', 'RadioButton', 'Rect', 'RectF', 'Rectangle', 'ResourceStream', 'RoundRect', 'SaveDialog', 'ScaledLayout', 'Screen', 'ScrollBar', 'ScrollBox', 'SearchBox', 'Selection', 'SelectionPoint', 'SetHighDpiAware', 'SetProcessDpiAwareness', 'Shape', 'Size', 'SizeF', 'SizeGrip', 'SmallScrollBar', 'SpeedButton', 'SpinBox', 'Splitter', 'StatusBar', 'Stream', 'StringColumn', 'StringGrid', 'StringStream', 'Strings', 'StyleBook', 'StyleManager', 'StyleStreaming', 'StyledControl', 'Switch', 'SysCommonAction', 'TabControl', 'TabItem', 'Text', 'TextControl', 'Thumb', 'TimeColumn', 'TimeEdit', 'Timer', 'ToolBar', 'Touch', 'Track', 'TrackBar', 'ValueRange', 'ValueRangeAction', 'VarParameter', 'VertScrollBox', 'ViewAction', 'VirtualKeyboard', 'WindowClose', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'crAppStart', 'crArrow', 'crCross', 'crDefault', 'crDrag', 'crHSplit', 'crHandPoint', 'crHelp', 'crHourGlass', 'crIBeam', 'crMultiDrag', 'crNo', 'crNoDrop', 'crNone', 'crSQLWait', 'crSize', 'crSizeAll', 'crSizeNESW', 'crSizeNS', 'crSizeNWSE', 'crSizeWE', 'crUpArrow', 'crVSplit', 'fmCreate', 'fmOpenRead', 'fmOpenReadWrite', 'fmOpenWrite', 'fmShareCompat', 'fmShareDenyNone', 'fmShareDenyRead', 'fmShareDenyWrite', 'fmShareExclusive', 'ssAlt', 'ssCtrl', 'ssDouble', 'ssLeft', 'ssMiddle', 'ssRight', 'ssShift'] >>>
  13. shineworld

    Modify bitmap of FMX Image object

    OK Bitmap can be modified not, but I was not able to find how to use TCanvas.FillText with Python DelphiFMX. Any try to pass arguments give me: Traceback (most recent call last): File "D:\x\develop\qem\cnc_api_client_core_1\python\api_client_fmx_demo\api_client_fmx_demo_desktop_view.py", line 690, in __on_timer_update canvas.FillText(r, 'hello world', False, 100.0, None, 'Center', 'Center') TypeError: "FillText" called with invalid arguments. # update tab digital inputs/outputs values if self.TabControl.ActiveTab == self.TabDIO: bitmap = self.DIOImage.Bitmap bitmap.Width = int(self.DIOImage.Width) bitmap.Height = int(self.DIOImage.Height) bitmap.Clear(0xFF000000) canvas = bitmap.Canvas r = RectF(8 + 15, 10, bitmap.Width - 8, bitmap.Height - 10) # from delphi FMX documentation # procedure FillText( # const ARect: TRectF; # const AText: string; # const WordWrap: Boolean; # const AOpacity: Single; # const Flags: TFillTextFlags; # const ATextAlign: TTextAlign; # const AVTextAlign: TTextAlign = TTextAlign.Center # ); virtual; canvas.FillText(r, 'hello world', False, 100.0, None, 'Center', 'Center')
  14. shineworld

    ANN: New Opencv v. 4.6 C++ API wrapper

    This can help because I was able to find and download ONLY OpenCV DLL for 64-bits.
  15. shineworld

    ANN: New Opencv v. 4.6 C++ API wrapper

    I was not able to run pre-made samples. They are 32-bit not 64-bit and library README.MD say that only 64-bit are possibile. I've tried to activate 64-bit platform in samples project but only 32-bit it is possible.
  16. In the company, when we switched from SVN to GIT, it was hard, initially just using console commands. Then we started using TortoiseGIT and a way opened up. Everything runs smoothly. Collaborative work got easier, like tracking changes, versions, etc. At this point, I honestly don't regret SVN at all...
  17. Take care: You can have a Python embed version OUT of path which works but if you have the same version of Python installed normally your embedded version pip list will reach ALSO a cached path (from the normally installed Python version) in %APPDATA%\Python\Python<version>\site-packages. This does not overload your native Python embed local packages, just add others to pip visibility.
  18. shineworld

    How many people use Delphi?

    Win11/Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz Max 1.99 GHz (Max limited because a notebook)/4-cores/8-threads/16GB/RAD10.4/Release/<below data> D:\spritz_bench>spritz_bench.exe spritz prng: 149.50 MiB/s D:\spritz_bench>spritz_bench.64.exe spritz prng: 191.12 MiB/s
  19. shineworld

    How many people use Delphi?

    I wrote "it's fast" not "it's the fastest". In some things it is the same as C++, in others, it is slightly slower but not as bad. I work on very large projects, the last one being about 19 million lines of code, where there is a lot of math and UI. I don't regret C++, I've tried translating parts from Delphi to Visual Studio C++ and then embedded as a DLL with no significant gains, but resulting in longer development times and adding debugging difficulties. I use C and C++ a lot in the linux environment for embedded boards in ARM architecture, even if I have never seriously dealt with the freepascal counterpart, as in that environment you would navigate by sight.
  20. shineworld

    Python over Delphi

    you can't compare Python vs Delphi but think of Python with Delphi 🙂
  21. shineworld

    How many people use Delphi?

    Delphi is not DEAD is a very very OOP-powerful language. It is fast. It is simple and concise. It is robust and safe. It is productive (few lines of code compared to C++, Java, etc). If completely customizable, you can modify any unit of any library (with sources) to do customized things. Projects code has high longevity (I've moved old projects of 2007 to the latest versions with very few changes). Support many platforms (I will hope in the future full direct support of Linux also for arm processors). Long life to the Delphi!
  22. shineworld

    Python over Delphi

    For me the better solution is 1. To use Python on Delphi, to access the immense packages library of Python overall in math things. 2. Use Delphi to create new very fast modules, and packages, for Python, for example to move threaded things on Delphi where Python thread are very funny. 3. Use Delphi VCL/FMX to create robust Python UI and programs. Delphi compiled code is one of more fast in the market. Python covers a lot of scientific fields. Use either and you will be a winner.
  23. Hi all, I would like to add, to a python4delphi module, a getter method which return a 'dict'. For example: > import pycnccore1 as pyc >cnc_core = pyc.CNCCore() >print(cnc_core.paths) {'user_path': 'c:\\xyz', 'machine_path': 'd:\\machine_test', and so on} I don't know how to create a Delphi type to contain the dictionary and convert it to a Python dict as a result of the getter method. function TPyCNCCore.GetPaths(AContext: Pointer): PPyObject; begin Adjust(@Self); var PathDict: <i_do_not_know>; PathDict.Append('user_path', Self.UserPathString); PathDict.Append('machine_path', Self.MachinePathString); ... and so on ... Result := GetPythonEngine.VariantAsPyObject(PathDict); end; class procedure TPyCNCCore.RegisterGetSets(PythonType: TPythonType); begin inherited; with PythonType do begin PythonType.AddGetSet('paths', @TPyCNCCore.GetPaths, nil, 'Returns the used paths', nil); end; end; Thanks in advance for your suggestions Silverio
  24. shineworld

    Create a property get of 'dict' type

    Ah ok, I completely misrepresented your previous sugestions. So it would make more sense to do a normal GetPath(name) method that returns the value instead of returning a dictionary with all the variables 🙂 It makes sense Thanks for the suggestion
  25. shineworld

    Create a property get of 'dict' type

    In other projects, I've used the automatic conversion of Delphi classes to related Python wrapper classes. In this project, I would like manually create the python module classes using low-level python implementation. Looking at P4D WrapFireDac.pas code I saw a way to manually create a dictionary. Seems to work but is hard to know when to apply Py_XDecRef.... function TPyCNCCore.GetPaths(AContext: Pointer): PPyObject; var Key: PPyObject; Value: PPyObject; PathsDict: PPyObject; Engine: TPythonEngine; procedure AddItem(const K, V: string); begin Key := Engine.VariantAsPyObject(Variant(K)); Value := Engine.VariantAsPyObject(Variant(V)); Engine.PyDict_SetItem(PathsDict, Key, Value); Engine.Py_XDecRef(Key); Engine.Py_XDecRef(Value); end; begin Adjust(@Self); Engine := GetPythonEngine; PathsDict := Engine.PyDict_New; AddItem('MachineBackupPath', Self.FCNCManager.MachineBackupPath); AddItem('MachineCustomizePath', Self.FCNCManager.MachineCustomizePath); AddItem('MachineMacrosPath', Self.FCNCManager.MachineMacrosPath); AddItem('MachineMediaPath', Self.FCNCManager.MachineMediaPath); AddItem('MachinePath', Self.FCNCManager.MachinePath); AddItem('MachineRunPath', Self.FCNCManager.MachineRunPath); AddItem('MachineVmPath', Self.FCNCManager.MachineVmPath); AddItem('SamplesPath', Self.FCNCManager.SamplesPath); AddItem('UserDataPath', Self.FCNCManager.UserDataPath); Result := PathsDict; end; I don't know if this is the right way to 'return' a dict in a getter method.. In my ignorance of the subject, I am navigating by sight. Should be cool a direct way to convert a TDictionary to Python dict.
×