// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. // // APIs for hosting CoreCLR // #ifndef __CORECLR_HOST_H__ #define __CORECLR_HOST_H__ #if defined(_WIN32) && defined(_M_IX86) #define CORECLR_CALLING_CONVENTION __stdcall #else #define CORECLR_CALLING_CONVENTION #endif // For each hosting API, we define a function prototype and a function pointer // The prototype is useful for implicit linking against the dynamic coreclr // library and the pointer for explicit dynamic loading (dlopen, LoadLibrary) #define CORECLR_HOSTING_API(function, ...) \ extern "C" int CORECLR_CALLING_CONVENTION function(__VA_ARGS__); \ typedef int (CORECLR_CALLING_CONVENTION *function##_ptr)(__VA_ARGS__) CORECLR_HOSTING_API(coreclr_preload_assembly, const char* assemblyPath); // // Initialize the CoreCLR. Creates and starts CoreCLR host and creates an app domain // // Parameters: // exePath - Absolute path of the executable that invoked the ExecuteAssembly (the native host application) // appDomainFriendlyName - Friendly name of the app domain that will be created to execute the assembly // propertyCount - Number of properties (elements of the following two arguments) // propertyKeys - Keys of properties of the app domain // propertyValues - Values of properties of the app domain // hostHandle - Output parameter, handle of the created host // domainId - Output parameter, id of the created app domain // // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // CORECLR_HOSTING_API(coreclr_initialize, const char* exePath, const char* appDomainFriendlyName, int propertyCount, const char** propertyKeys, const char** propertyValues, void** hostHandle, unsigned int* domainId); // // Shutdown CoreCLR. It unloads the app domain and stops the CoreCLR host. // // Parameters: // hostHandle - Handle of the host // domainId - Id of the domain // // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // CORECLR_HOSTING_API(coreclr_shutdown, void* hostHandle, unsigned int domainId); // // Shutdown CoreCLR. It unloads the app domain and stops the CoreCLR host. // // Parameters: // hostHandle - Handle of the host // domainId - Id of the domain // latchedExitCode - Latched exit code after domain unloaded // // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // CORECLR_HOSTING_API(coreclr_shutdown_2, void* hostHandle, unsigned int domainId, int* latchedExitCode); // // Create a native callable function pointer for a managed method. // // Parameters: // hostHandle - Handle of the host // domainId - Id of the domain // entryPointAssemblyName - Name of the assembly which holds the custom entry point // entryPointTypeName - Name of the type which holds the custom entry point // entryPointMethodName - Name of the method which is the custom entry point // delegate - Output parameter, the function stores a native callable function pointer to the delegate at the specified address // // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // CORECLR_HOSTING_API(coreclr_create_delegate, void* hostHandle, unsigned int domainId, const char* entryPointAssemblyName, const char* entryPointTypeName, const char* entryPointMethodName, void** delegate); // // Execute a managed assembly with given arguments // // Parameters: // hostHandle - Handle of the host // domainId - Id of the domain // argc - Number of arguments passed to the executed assembly // argv - Array of arguments passed to the executed assembly // managedAssemblyPath - Path of the managed assembly to execute (or NULL if using a custom entrypoint). // exitCode - Exit code returned by the executed assembly // // Returns: // HRESULT indicating status of the operation. S_OK if the assembly was successfully executed // CORECLR_HOSTING_API(coreclr_execute_assembly, void* hostHandle, unsigned int domainId, int argc, const char** argv, const char* managedAssemblyPath, unsigned int* exitCode); #undef CORECLR_HOSTING_API #endif // __CORECLR_HOST_H__