我正在用c++编写CoreCLR主机。
我已经成功地从c++调用了C#函数:
https://docs.microsoft.com/en-us/dotnet/core/tutorials/netcore-hosting
阅读该文档:
给定一个C#函数,我该如何“创建c++函数指针类型”
例如,对于这样的功能:
public static int withParams(int aNumber, string[] args)
有一些编码/拆组规则,如何将对象或数组作为参数?
是否有用于将coreclr嵌入到C++代码中的适当的官方文档?
我正在寻找这样的东西(但对于coreclr):
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html
最佳答案
我认为文档包含您需要的代码。
void *pfnDelegate = NULL;
hr = runtimeHost->CreateDelegate(
domainId,
L"HW, Version=1.0.0.0, Culture=neutral", // Target managed assembly
L"ConsoleApplication.Program", // Target managed type
L"Main", // Target entry point (static method)
(INT_PTR*)&pfnDelegate);
((MainMethodFp*)pfnDelegate)(NULL);
我在dotnet核心dll中创建了一个类,并能够按如下方式从cpp调用它。
void *pfnDelegate = NULL;
hr = runtimeHost->CreateDelegate(
domainId,
L"SampleAppCore", // Target managed assembly
L"SampleAppCore.Start", // Target managed type
L"Run", // Target entry point (static method)
(INT_PTR*)&pfnDelegate);
if (FAILED(hr))
{
printf("ERROR - Failed to execute %s.\nError code:%x\n", targetApp, hr);
return -1;
}
char* hello = "hello ";
((MainMethodFp*)pfnDelegate)(hello);
代表的格式
typedef void (STDMETHODCALLTYPE MainMethodFp)(char* args);
核心类
using System;
namespace SampleAppCore
{
public static class Start{
public static void Run(string input){
Console.WriteLine(input);
}
}
}