zwc*_*oud 7 .net mono .net-core
我之前在Mono上做过这个,我认为应该有一些方法可以用coreclr做同样的事情.
我在Mono上做了什么(在VS2013上编译并在win10上运行):
#include <windows.h>
#include <mono/jit/jit.h>
#include <mono/metadata/assembly.h>
#pragma comment(lib, "mono-2.0.lib")
int main(int argc, char* argv[])
{
mono_set_dirs("C:\\Program Files (x86)\\Mono\\lib",
"C:\\Program Files (x86)\\Mono\\etc");
MonoDomain *domain;
domain = mono_jit_init(argv[0]);
MonoAssembly *assembly;
char* assemblyPath = "D:\\Mono\\hello.exe";
assembly = mono_domain_assembly_open(domain, assemblyPath);
if (!assembly)
return 1;
int returnValue = mono_jit_exec(domain, assembly, argc, argv);
mono_jit_cleanup(domain);
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码调用输入法Main()
在hello.exe
.我也可以加载一个类型mono_class_from_name
,创建一个托管对象mono_object_new
,初始化(调用构造函数),mono_runtime_object_init
并使用它调用方法mono_runtime_invoke
.
所有这些都在mono doc上有详细记录.
我没有深入研究coreclr repo,对内部实现一无所知.
我已经通过互联网搜索并找到了一些可能有用的资源:
添加我已尝试在dotnetcore的Windows版本上运行dumpbin.输出显示只有一些函数在coreclr.dll中导出.
ordinal hint RVA name
3 0 00018A30 GetCLRRuntimeHost
4 1 00002030 GetMetaDataInternalInterface
5 2 000021D0 GetMetaDataInternalInterfaceFromPublic
6 3 000021E0 GetMetaDataPublicInterfaceFromInternal
7 4 00001EA0 MetaDataGetDispenser
8 5 00002EA0 coreclr_create_delegate
9 6 00002FC0 coreclr_execute_assembly
10 7 00002B80 coreclr_initialize
11 8 00002DF0 coreclr_shutdown
2 9 004D9E78 g_CLREngineMetrics
Run Code Online (Sandbox Code Playgroud)
所以我没能找到与.netcore中的coreclr做同样事情的方法.
我的问题是如何在coreclr上做到这一点?
更具体的,有什么功能coreclr像coreclr_class_from_name
,coreclr_object_new
,coreclr_runtime_object_init
,coreclr_runtime_invoke
等?如果有,他们是否在某处记录?
归档时间: |
|
查看次数: |
665 次 |
最近记录: |