在 Linux 上使用 CoreCLR 从 C++ 调用 C# 方法
Invoking C# methods from C++ with usage of CoreCLR on Linux
我找到了 that code which allows to execute C# assembly on hosted CLR in Linux. But I want to invoke only some methods from C# dll. I've tried this and this,但我不知道如何 正确地 在 Linux 上包含或重新定义:
ICLRMetaHost, ICLRRuntimeInfo, ICLRRuntimeHost, CLSID_CLRMetaHost,
IID_ICLRMetaHost, IID_ICLRRuntimeInfo, CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost
您是否有任何想法或link一些代码可以在 Linux 上使用 CoreCLR 从 C++ 调用 C#?
我只对 Linux 上的 CoreCLR 感兴趣(不是 Mono!)。
好的,我发现为了获得对 C# 函数的委托,您必须使用 coreCLR 提供的这三个函数:
// this one first, to initialize coreCLR
int (coreclrInitializeFunction)(
const char* exePath,
const char* appDomainFriendlyName,
int propertyCount,
const char** propertyKeys,
const char** propertyValues,
void** hostHandle,
unsigned int* domainId);
// this one to get delegate to your C# function
int (coreclrCreateDelegateFunction)(
void* hostHandle,
unsigned int domainId,
const char* entryPointAssemblyName,
const char* entryPointTypeName,
const char* entryPointMethodName,
void** delegate);
// this one on the end, to close coreCLR
int (coreclrShutdownFunction)(
void* hostHandle,
unsigned int domainId);
这是我调用 C# 函数的示例代码,该函数在 C++ 对象上调用 C++ 方法:https://github.com/Marqin/simpleCoreCLRHost
我找到了 that code which allows to execute C# assembly on hosted CLR in Linux. But I want to invoke only some methods from C# dll. I've tried this and this,但我不知道如何 正确地 在 Linux 上包含或重新定义:
ICLRMetaHost, ICLRRuntimeInfo, ICLRRuntimeHost, CLSID_CLRMetaHost,
IID_ICLRMetaHost, IID_ICLRRuntimeInfo, CLSID_CLRRuntimeHost,
IID_ICLRRuntimeHost
您是否有任何想法或link一些代码可以在 Linux 上使用 CoreCLR 从 C++ 调用 C#?
我只对 Linux 上的 CoreCLR 感兴趣(不是 Mono!)。
好的,我发现为了获得对 C# 函数的委托,您必须使用 coreCLR 提供的这三个函数:
// this one first, to initialize coreCLR
int (coreclrInitializeFunction)(
const char* exePath,
const char* appDomainFriendlyName,
int propertyCount,
const char** propertyKeys,
const char** propertyValues,
void** hostHandle,
unsigned int* domainId);
// this one to get delegate to your C# function
int (coreclrCreateDelegateFunction)(
void* hostHandle,
unsigned int domainId,
const char* entryPointAssemblyName,
const char* entryPointTypeName,
const char* entryPointMethodName,
void** delegate);
// this one on the end, to close coreCLR
int (coreclrShutdownFunction)(
void* hostHandle,
unsigned int domainId);
这是我调用 C# 函数的示例代码,该函数在 C++ 对象上调用 C++ 方法:https://github.com/Marqin/simpleCoreCLRHost