123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- #ifndef __HOSTFXR_H__
- #define __HOSTFXR_H__
- #include <stddef.h>
- #include <stdint.h>
- #if defined(_WIN32)
- #define HOSTFXR_CALLTYPE __cdecl
- #ifdef _WCHAR_T_DEFINED
- typedef wchar_t char_t;
- #else
- typedef unsigned short char_t;
- #endif
- #else
- #define HOSTFXR_CALLTYPE
- typedef char char_t;
- #endif
- enum hostfxr_delegate_type
- {
- hdt_com_activation,
- hdt_load_in_memory_assembly,
- hdt_winrt_activation,
- hdt_com_register,
- hdt_com_unregister,
- hdt_load_assembly_and_get_function_pointer,
- hdt_get_function_pointer,
- };
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_main_fn)(const int argc, const char_t **argv);
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_main_startupinfo_fn)(
- const int argc,
- const char_t **argv,
- const char_t *host_path,
- const char_t *dotnet_root,
- const char_t *app_path);
- typedef int32_t(HOSTFXR_CALLTYPE* hostfxr_main_bundle_startupinfo_fn)(
- const int argc,
- const char_t** argv,
- const char_t* host_path,
- const char_t* dotnet_root,
- const char_t* app_path,
- int64_t bundle_header_offset);
- typedef void(HOSTFXR_CALLTYPE *hostfxr_error_writer_fn)(const char_t *message);
- //
- // Sets a callback which is to be used to write errors to.
- //
- // Parameters:
- // error_writer
- // A callback function which will be invoked every time an error is to be reported.
- // Or nullptr to unregister previously registered callback and return to the default behavior.
- // Return value:
- // The previously registered callback (which is now unregistered), or nullptr if no previous callback
- // was registered
- //
- // The error writer is registered per-thread, so the registration is thread-local. On each thread
- // only one callback can be registered. Subsequent registrations overwrite the previous ones.
- //
- // By default no callback is registered in which case the errors are written to stderr.
- //
- // Each call to the error writer is sort of like writing a single line (the EOL character is omitted).
- // Multiple calls to the error writer may occur for one failure.
- //
- // If the hostfxr invokes functions in hostpolicy as part of its operation, the error writer
- // will be propagated to hostpolicy for the duration of the call. This means that errors from
- // both hostfxr and hostpolicy will be reporter through the same error writer.
- //
- typedef hostfxr_error_writer_fn(HOSTFXR_CALLTYPE *hostfxr_set_error_writer_fn)(hostfxr_error_writer_fn error_writer);
- typedef void* hostfxr_handle;
- struct hostfxr_initialize_parameters
- {
- size_t size;
- const char_t *host_path;
- const char_t *dotnet_root;
- };
- //
- // Initializes the hosting components for a dotnet command line running an application
- //
- // Parameters:
- // argc
- // Number of argv arguments
- // argv
- // Command-line arguments for running an application (as if through the dotnet executable).
- // Only command-line arguments which are accepted by runtime installation are supported, SDK/CLI commands are not supported.
- // For example 'app.dll app_argument_1 app_argument_2`.
- // parameters
- // Optional. Additional parameters for initialization
- // host_context_handle
- // On success, this will be populated with an opaque value representing the initialized host context
- //
- // Return value:
- // Success - Hosting components were successfully initialized
- // HostInvalidState - Hosting components are already initialized
- //
- // This function parses the specified command-line arguments to determine the application to run. It will
- // then find the corresponding .runtimeconfig.json and .deps.json with which to resolve frameworks and
- // dependencies and prepare everything needed to load the runtime.
- //
- // This function only supports arguments for running an application. It does not support SDK commands.
- //
- // This function does not load the runtime.
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_initialize_for_dotnet_command_line_fn)(
- int argc,
- const char_t **argv,
- const struct hostfxr_initialize_parameters *parameters,
- /*out*/ hostfxr_handle *host_context_handle);
- //
- // Initializes the hosting components using a .runtimeconfig.json file
- //
- // Parameters:
- // runtime_config_path
- // Path to the .runtimeconfig.json file
- // parameters
- // Optional. Additional parameters for initialization
- // host_context_handle
- // On success, this will be populated with an opaque value representing the initialized host context
- //
- // Return value:
- // Success - Hosting components were successfully initialized
- // Success_HostAlreadyInitialized - Config is compatible with already initialized hosting components
- // Success_DifferentRuntimeProperties - Config has runtime properties that differ from already initialized hosting components
- // CoreHostIncompatibleConfig - Config is incompatible with already initialized hosting components
- //
- // This function will process the .runtimeconfig.json to resolve frameworks and prepare everything needed
- // to load the runtime. It will only process the .deps.json from frameworks (not any app/component that
- // may be next to the .runtimeconfig.json).
- //
- // This function does not load the runtime.
- //
- // If called when the runtime has already been loaded, this function will check if the specified runtime
- // config is compatible with the existing runtime.
- //
- // Both Success_HostAlreadyInitialized and Success_DifferentRuntimeProperties codes are considered successful
- // initializations. In the case of Success_DifferentRuntimeProperties, it is left to the consumer to verify that
- // the difference in properties is acceptable.
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_initialize_for_runtime_config_fn)(
- const char_t *runtime_config_path,
- const struct hostfxr_initialize_parameters *parameters,
- /*out*/ hostfxr_handle *host_context_handle);
- //
- // Gets the runtime property value for an initialized host context
- //
- // Parameters:
- // host_context_handle
- // Handle to the initialized host context
- // name
- // Runtime property name
- // value
- // Out parameter. Pointer to a buffer with the property value.
- //
- // Return value:
- // The error code result.
- //
- // The buffer pointed to by value is owned by the host context. The lifetime of the buffer is only
- // guaranteed until any of the below occur:
- // - a 'run' method is called for the host context
- // - properties are changed via hostfxr_set_runtime_property_value
- // - the host context is closed via 'hostfxr_close'
- //
- // If host_context_handle is nullptr and an active host context exists, this function will get the
- // property value for the active host context.
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_get_runtime_property_value_fn)(
- const hostfxr_handle host_context_handle,
- const char_t *name,
- /*out*/ const char_t **value);
- //
- // Sets the value of a runtime property for an initialized host context
- //
- // Parameters:
- // host_context_handle
- // Handle to the initialized host context
- // name
- // Runtime property name
- // value
- // Value to set
- //
- // Return value:
- // The error code result.
- //
- // Setting properties is only supported for the first host context, before the runtime has been loaded.
- //
- // If the property already exists in the host context, it will be overwritten. If value is nullptr, the
- // property will be removed.
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_set_runtime_property_value_fn)(
- const hostfxr_handle host_context_handle,
- const char_t *name,
- const char_t *value);
- //
- // Gets all the runtime properties for an initialized host context
- //
- // Parameters:
- // host_context_handle
- // Handle to the initialized host context
- // count
- // [in] Size of the keys and values buffers
- // [out] Number of properties returned (size of keys/values buffers used). If the input value is too
- // small or keys/values is nullptr, this is populated with the number of available properties
- // keys
- // Array of pointers to buffers with runtime property keys
- // values
- // Array of pointers to buffers with runtime property values
- //
- // Return value:
- // The error code result.
- //
- // The buffers pointed to by keys and values are owned by the host context. The lifetime of the buffers is only
- // guaranteed until any of the below occur:
- // - a 'run' method is called for the host context
- // - properties are changed via hostfxr_set_runtime_property_value
- // - the host context is closed via 'hostfxr_close'
- //
- // If host_context_handle is nullptr and an active host context exists, this function will get the
- // properties for the active host context.
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_get_runtime_properties_fn)(
- const hostfxr_handle host_context_handle,
- /*inout*/ size_t * count,
- /*out*/ const char_t **keys,
- /*out*/ const char_t **values);
- //
- // Load CoreCLR and run the application for an initialized host context
- //
- // Parameters:
- // host_context_handle
- // Handle to the initialized host context
- //
- // Return value:
- // If the app was successfully run, the exit code of the application. Otherwise, the error code result.
- //
- // The host_context_handle must have been initialized using hostfxr_initialize_for_dotnet_command_line.
- //
- // This function will not return until the managed application exits.
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_run_app_fn)(const hostfxr_handle host_context_handle);
- //
- // Gets a typed delegate from the currently loaded CoreCLR or from a newly created one.
- //
- // Parameters:
- // host_context_handle
- // Handle to the initialized host context
- // type
- // Type of runtime delegate requested
- // delegate
- // An out parameter that will be assigned the delegate.
- //
- // Return value:
- // The error code result.
- //
- // If the host_context_handle was initialized using hostfxr_initialize_for_runtime_config,
- // then all delegate types are supported.
- // If the host_context_handle was initialized using hostfxr_initialize_for_dotnet_command_line,
- // then only the following delegate types are currently supported:
- // hdt_load_assembly_and_get_function_pointer
- // hdt_get_function_pointer
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_get_runtime_delegate_fn)(
- const hostfxr_handle host_context_handle,
- enum hostfxr_delegate_type type,
- /*out*/ void **delegate);
- //
- // Closes an initialized host context
- //
- // Parameters:
- // host_context_handle
- // Handle to the initialized host context
- //
- // Return value:
- // The error code result.
- //
- typedef int32_t(HOSTFXR_CALLTYPE *hostfxr_close_fn)(const hostfxr_handle host_context_handle);
- struct hostfxr_dotnet_environment_sdk_info
- {
- size_t size;
- const char_t* version;
- const char_t* path;
- };
- typedef void(HOSTFXR_CALLTYPE* hostfxr_get_dotnet_environment_info_result_fn)(
- const struct hostfxr_dotnet_environment_info* info,
- void* result_context);
- struct hostfxr_dotnet_environment_framework_info
- {
- size_t size;
- const char_t* name;
- const char_t* version;
- const char_t* path;
- };
- struct hostfxr_dotnet_environment_info
- {
- size_t size;
- const char_t* hostfxr_version;
- const char_t* hostfxr_commit_hash;
- size_t sdk_count;
- const struct hostfxr_dotnet_environment_sdk_info* sdks;
- size_t framework_count;
- const struct hostfxr_dotnet_environment_framework_info* frameworks;
- };
- #endif //__HOSTFXR_H__
|