从Mac上的C ++代码调用时,`coreclr_create_delegate`不起作用

时间:2018-01-03 02:54:12

标签: c# c++ macos .net-core

我需要从Mac上的C ++代码调用C#库中声明的方法。我正在使用.Net Core framework 2.0.x(2.0.3,2.0.4)。

为了使其正常工作,我调用成功运行的coreclr_initialize并返回0。然后我通过传递下面给出的必需参数来调用coreclr_create_delegate

auto no_del = []( auto x ) { (void)(x); };
auto csharp_runIt = std::unique_ptr<csharp_runIt_t, decltype(no_del)>(nullptr, no_del);

int status = coreclr_create_delegate (
                                          hostHandle,
                                          domainId,
                                          assemblyName.c_str(),
                                          entryPointType.c_str(),
                                          entryPointName.c_str(),
                                          reinterpret_cast<void**>(&csharp_runIt)
                                          );

此处,hostHandledomainId是从coreclr_initialize收到的。其余值为:assemblyName(dll名称),entryPointType(类名称)和entryPointName(函数名称)。 运行它使用十六进制代码返回负值:0x80070002

我也将库名,类名和方法名作为参数传递。 由于没有多少人尝试过,因此在网上没有太多帮助。

2 个答案:

答案 0 :(得分:1)

如果该类不在全局命名空间中,则需要指定该类的完全限定名称。例如,您需要在此处将entryPointType设置为samplelibrary.SampleClass

答案 1 :(得分:0)

好吧所以我弄错了。 .NetCore库位于命名空间下,因此coreclr_create_delegate未创建。 所以要么在使用C ++委托时也不要使用命名空间或使用它。

.Netcore代码应该是这样的:

//namespace samplelibrary //This was causing error
//{
    public class SampleClass
    {
        public static string MyFunc()
        {
            return "arrived";
        }
    }
//}