https://www.mono-project.com/docs/advanced/embedding/
#include <mono/jit/jit.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/debug-helpers.h>
#pragma comment(lib, "mono-2.0-sgen.lib")
모노 설치폴더의 lib, etc 폴더 위치를 지정한다.
mono_set_dirs("C:\\Program Files\\Mono\\lib", "C:\\Program Files\\Mono\\etc");
도메인 초기화
MonoDomain *domain;
domain = mono_jit_init( "myapp" );
// exe : Main을 포함하고 있는 경우 바로 실행 가능하다.
MonoAssembly *assembly;
assembly = mono_domain_assembly_open( domain, "D:\\Test.exe" );
mono_jit_exec( domain, assembly, argc, argv );
// dll 은 어셈블리의 image를 가져와서 추가 작업이 필요.
MonoAssembly *assembly;
assembly = mono_domain_assembly_open( domain, "D:\\Test.dll" );
MonoImage *image;
image = mono_assembly_get_image( assembly );
static 메쏘드를 호출하는 경우 : 인자, 리턴값 없음
class CSharpClass {
static void Method() { }
}
// debug-helpers 사용해 디스크립션 얻기
MonoMethodDesc *methodDesc;
methodDesc = mono_method_desc_new( "CSharpClass:Method()" , NULL);
// 디스크립션으로 메쏘드 얻기
MonoMethod *method;
method = mono_method_desc_search_in_image( methodDesc, image );
// 메쏘드 호출
// mono_runtime_invoke( MonoMethod *method, void *obj, void **params, MonoObject **exc);
mono_runtime_invoke( method, NULL, NULL, NULL);
객체의 메쏘드를 호출하는 경우 : 인자, 리턴값 있음
class CSharpClass {
int Method( string name ) { }
}
// 클래스를 얻는다
MonoClass *myClass
myClass = mono_class_from_name( image, "name-space", "CSharpClass" );
// 객체 생성 및 생성자 호출
MonoObject *object;
object = mono_object_new( domain, myClass );
mono_runtime_object_init( object );
// 디스크립션
MonoMethodDesc *methodDesc;
methodDesc = mono_method_desc_new( "CSharpClass:Method(string)" , NULL);
// 디스크립션으로 메쏘드 얻기
MonoMethod *method;
method = mono_method_desc_search_in_image( methodDesc, image );
// 리턴, 인자용 데이터
MonoObject *ret;
void *args[1];
args[0] = mono_string_new( domain , "Hello, World");
// 메쏘드 호출
ret = mono_runtime_invoke ( method, object, args, NULL );
int value = *(int*)mono_object_unbox(ret);
mono_jit_cleanup(domain);
'프로그래밍 > C,C++' 카테고리의 다른 글
[C#] 완전 이진트리 1차원배열 (0) | 2018.11.22 |
---|---|
MS 프로젝트 파일 (0) | 2018.10.02 |
Boost 라이브러리 빌드 (0) | 2018.08.28 |
[Win API] Console project (0) | 2017.12.06 |
[C++] 시스템 클럭 밀리세컨드 얻기 (0) | 2017.12.06 |
Kinect sdk 이미지 얻기 (0) | 2017.10.26 |
C# OLEDB 엑셀 읽기 (0) | 2016.02.21 |
[C#] 파일 읽고,쓰기 기초 (0) | 2013.09.12 |
[C#] 이미지 처리 기본 사항들 (0) | 2013.09.12 |
[C#] 이벤트 (0) | 2013.09.12 |