我需要从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)
);
此处,hostHandle
和domainId
是从coreclr_initialize
收到的。其余值为:assemblyName
(dll名称),entryPointType
(类名称)和entryPointName
(函数名称)。
运行它使用十六进制代码返回负值:0x80070002
。
我也将库名,类名和方法名作为参数传递。 由于没有多少人尝试过,因此在网上没有太多帮助。
答案 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";
}
}
//}