ShellAnything API in C
end2endzone opened this issue · comments
Is your feature request related to a problem? Please describe.
An C API should be created over ShellAnything core to allow safe access to ShellAnything features.
This API could also be used as the entry point for plugins or similar features.
Describe the solution you'd like
The following code changes must be implemented:
- Convert libeval to a DLL with a C interface.
- Convert shellanything library to a shared library.
- Rename shellanything library to sa.core.dll.
- Renamed "shellanything_unittest.exe" to "sa.tests.exe". This is not requied for the API but it is for consistency.
- Move include files from
include\shellanything
back tosrc
since they are not expected to be published and used. - Create sa.api.dll.
- Create file sa_action.h which provides features to the
Action
class. - Create file sa_config_manager.h which provide features to the
ConfigManager
class. - Create file sa_configuration.h which provide features to the
Configuration
class. - Create file sa_context.h which provide features to the
Context
class. - Create file sa_icon.h which provide features to the
Icon
class. - Create file sa_menu.h which provide features to the
Menu
class. - Create file sa_validator.h which provide features to the
Validator
class. - Move all sa_*.h files to
include\shellanything
to publish then with the installer.
- Create file sa_action.h which provides features to the
- Rename shellext library to shellextension.dll or sa.shellextension.dll. Careful to also update the scripts and the installation packages to make sure that files are now using the new filename.
- Create a directory structure under /src. For example,
/src/core
,/src/api
,/src/shared
- Move shared source files a.k.a
SHELLANYTHING_PRIVATE_FILES
to /src/shared. Rename source_group() to "ShellAnything Shared Files".
Describe alternatives you've considered
A possible alternative is to remove all std classes from the public header files. This would allow the library to be used by other compilers. It was first tried in #102 but it was cancelled since it was to complicated and created way too much overhead. See #102 for details.
Additional context
N/A