我正在用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);
        }

    }
}

10-04 15:06