----------- QuickGuide: ----------- * Open a demo. * Read the comments. ------------ Development: ------------ To view logfiles relevant to plugins see: * "%MultiBatcher%\logs\misc\program.log" * "%MultiBatcher%\logs\batches\" Of other "developer orientated" things are: * MultiBatcher >> Tools >> Reload Plugins". ----------- Deployment: ----------- Remember that compiled plugins should be placed in: * "%MultiBatcher%\modules\external\" (can contain multiple plugins) * "%MultiBatcher%\modules\external\YourDir\" (can contain 1 plugin) ------ Hints: ------ "Rules" when making plugins. 1. Do never modify, delete etc. the characters of *PChar* parameter / data (unless specified otherwise, as with some of the callbacks). If you need to modify the values somehow, do it in a copy. 2. The default values of properties should not change depending on information from program (e.g. under initialization). The exception is those strings shown to user (if plugin has localization/internationalization support). 3. The default init data parameters to properties have to be valid in batch. "Advices" when making plugins. 1. Remember setting the memory manager of your plugin to *IsMultiThread := True* in the initlization code (else in general, memory managers, stacks, and what else will be very sad). Check *LUmsPluginAllSharedBaseCore.pas*. 2. If you need to synchronize memory write access (or similar) between the currently active threads running your plugin, you will have to manage it yourself. One can e.g. use a *CriticalSection* for this. "Notes" when making plugins. 1. An executable/application can/should not release memory taken by plugin and vice versa. This plugin-interface-design avoids these kinds of pitfalls. "Extras* when making plugins (and releasing new versions). 1. Program handles changes in properties. This includes name, type, but also internal things (e.g. like "ColumnID" in grids). This means that in most cases the user will in worst case be warned that what he earlier saved to disk (for that specific property) is no longer valid. If you want to be 100% sure stuff like that does not happen, you will have to name your plugins different names (so user e.g. can have both version "MyPluginName1" and "MyPluginName2" loaded same time).