标签: mono-embedding

用C#嵌入单声道"输出参数"

我正在尝试使用libmono在C应用程序中嵌入一个C#类,但文档有点缺乏.

我正试图用原型调用方法 void MessageToSend(out MessageObject message);

我如何表示"out参数"?它是指向MonoObject的指针吗?谢谢.

PS.就libmono而言,'out'和'ref'参数是一样的吗?

c c# mono mono-embedding

12
推荐指数
1
解决办法
454
查看次数

嵌入:mono vs lua

我有兴趣听听人们在C/C++应用程序中嵌入单声道(.NET的开源实现)的经验.如何分发这样的应用程序以及依赖性是什么?我已经测试了OS X和mono作为一个巨大的框架(数百MB).我的应用程序的用户都需要这个大框架,或者可以将其删除或将所有内容编译到主可执行文件中.

我以前有过在一个C++应用程序中嵌入Lua的经验,这非常有效,因为我可以将整个lua解释器与我的主可执行文件静态链接.所以我没有外部依赖.是否可以用单声道做类似的事情?

这里的任何Lua人都能评论他们如何发现单声道与Lua相比?

PS:嵌入我指的是一个C++应用程序,它初始化单声道环境并加载.NET程序集并执行它,然后允许在程序集中的C#代码和主可执行文件中的C++方法之间进行通信.

c++ mono lua embedding mono-embedding

10
推荐指数
1
解决办法
5325
查看次数

使用Mono嵌入式获取泛型类型

如何使用单声道嵌入式调用创建通用List <String>对象?我可以获得List的MonoClass:

MonoClass* list = mono_class_from_name(mscorlibimage,
     "System.Collections.Generic", "List`1");
Run Code Online (Sandbox Code Playgroud)

我在文档中看到有

mono_class_from_generic_parameter(MonoGenericParam*...)
Run Code Online (Sandbox Code Playgroud)

但我不知道在哪里以及如何获得MonoGenericParam.或许我需要为mono_class_from_name构建一个有效的名称?我觉得这可能有点慢,但我现在接受了.我试过了

MonoClass* list = mono_class_from_name(mscorlib::get().image, "System.Collections.Generic", "List`1[System.String]");
Run Code Online (Sandbox Code Playgroud)

但没有运气.

更新:

好的我找到了办法.我仍然想知道是否有正式的做事方式,因为这个黑客对我来说太脏了.

基本上我搜索了通用方法的单一来源,并找到了mono_class_bind_generic_parameters(参见https://raw.github.com/mono/mono/master/mono/metadata/reflection.c).除了.so之外,我还必须链接到libmono-2.0.a才能使用它.但它有效:

extern "C" MonoClass*
mono_class_bind_generic_parameters(MonoClass *klass, 
    int type_argc, MonoType **types, bool is_dynamic);

MonoClass* list = mono_class_from_name(mscorlib::get().image,
    "System.Collections.Generic", "List`1");
MonoClass* strcls = mono_class_from_name(mscorlib::get().image, "System", "String");
printf("str class: %p\n", strcls);
MonoType* strtype = mono_class_get_type(strcls);
printf("str type: %p\n", strtype);
MonoType* types[1];
types[0] = strtype;
list = mono_class_bind_generic_parameters(list, 1, types, false);
printf("list[string] class: %p\n", list);
MonoObject* obj = mono_object_new(domain, list); …
Run Code Online (Sandbox Code Playgroud)

mono mono-embedding

6
推荐指数
1
解决办法
1660
查看次数

单嵌入,从C调用C#泛型方法

我无法弄清楚如何从C调用泛型方法(静态和非静态).

最大的罪魁祸首是调用泛型方法基本上没有文档记录,单声道存储库中没有示例,但有人提到这可能在文档中是可能的:

If you want to invoke generic methods, you must call the method on the "inflated" class, which you can obtain from the mono_object_get_class()


MonoClass *clazz;
MonoMethod *method;

clazz = mono_object_get_class (obj);

/*
 * If there are more Add methods declared, you
 * may use mono_method_desc_search_in_class (clazz, ":Add(T)"),
 * you must substitute ":Add(T)" with the correct type, for example
 * for List<int>, you would use ":Add(int)".
 */
method = mono_class_get_method_from_name (clazz, "Add", 1);
mono_runtime_invoke (method, obj, args, &exception);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这并没有那么有用,因为它没有显示完整的示例,无论我做什么(使用 …

c c# mono mono-embedding

5
推荐指数
1
解决办法
1481
查看次数

monosgen-2.0.dll 和 libmonosgen-2.0.dll 有什么区别?

我正在尝试使用 SGen GC 将 Mono 嵌入到c程序中,如http://www.mono-project.com/docs/advanced/embedding/中。在 Mono 发行版中,C:\Program Files\Mono\bin有两种不同的具有 SGen 支持的 Mono DLL:

  • monosgen-2.0.dll,大小:3,082 KB
  • libmonosgen-2.0.dll,大小:14,801 KB

该教程说On Windows, depending on the GC implementation to be used (... SGen), you need to link your application with ... monosgen-2.0.lib,但它没有说明我必须使用什么 dll。我很困惑,因为本教程说我应该重命名libmonosgen-2.0.dllmonosgen-2.0.dll(但为什么?)。示例程序可以在这两个库中编译并正常工作。Dependency Walker 显示libmonosgen-2.0.dll导出的符号比monosgen-2.0.dll. 那么这些库之间的实际区别是什么?

.net c# dll mono mono-embedding

5
推荐指数
0
解决办法
784
查看次数

调试嵌入式单声道运行时启动的C#程序集?

我在谈论使用C#进行游戏编程的小型游戏引擎.所以,我有一个嵌入单声道运行时的C++应用程序(我称之为'启动程序').我有一个用C#编写的程序集,它是我的游戏引擎类库.启动程序按照Embedding Mono中的建议启动程序集.

而现在有趣的部分!启动器实现了C++ miscelaneous函数,这些函数作为我的游戏引擎类的内部方法暴露给单声道运行时.这就是为什么我的游戏引擎组件没有启动器,它在C++中实现了大部分引擎.

问题:我应该如何调试我的C#程序集?而更重要的是,我应该如何调试我将用C#编写的游戏?

如您所知,我无法使用MonoDevelop Debugger调试程序集,因为它不会接收某些方法的内部C++实现.

我需要的是运行启动器.然后启动器将使用嵌入式单声道运行时启动C#程序集.然后我需要一些东西连接到已启动的程序集以允许其调试.

或任何其他方式.谢谢!

debugging mono interop mono-embedding

4
推荐指数
1
解决办法
3929
查看次数

MonoObject到c ++ bool

我已将单声道运行时嵌入到我的C++应用程序中.C++代码调用一个返回bool值的C#方法.

如何从返回的MonoObject中获取bool值?

MonoObject* res = mono_runtime_invoke(my_method_instance, processor_, nullptr, nullptr);
bool result = *how does this work??*;
Run Code Online (Sandbox Code Playgroud)

mono-embedding

1
推荐指数
1
解决办法
619
查看次数

标签 统计

mono-embedding ×7

mono ×6

c# ×3

c ×2

.net ×1

c++ ×1

debugging ×1

dll ×1

embedding ×1

interop ×1

lua ×1