问题标签 [mono-embedding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 单声道嵌入,从 C 调用 C# 泛型方法
我无法弄清楚如何从 C 调用泛型方法(静态和非静态)。
最大的罪魁祸首是调用泛型方法基本上没有记录,mono 存储库中没有示例,但在文档中提到这应该是可能的:
不幸的是,这并没有太大帮助,因为它没有显示完整的示例,并且无论我做什么(使用mono_object_get_class
或不使用)我最终都会收到警告,然后在调用泛型方法时崩溃。
下面是一个示例 C# 类和调用它的 C 代码。调用非泛型方法工作得很好,但我不知道如何调用泛型方法。我将不胜感激任何可以提供帮助的提示。
示例 CSharp
样品 C
c# - 添加通过引用传递字符串的 Mono 内部调用
我正在尝试使用通过引用传递字符串的单声道创建方法,这是我拥有的测试代码:
C++:
C#:
但没有打印响应(仅测试:)
如何使用 Mono 通过引用正确传递字符串?
macos - Mac 上的单声道 64 位。缺少 4.5
我想将 Mono嵌入到 64 位 Mac OSX 应用程序中(从 Windows C++ 移植,一切正常)。由于只有 32 位 Mono 可用于 Mac OSX 的预编译,因此我设法按照本手册构建了自己的 64 位 Mono 版本。
在 XCode 中调试我的 64 位应用程序时,单声道嵌入初始化失败并显示“找不到或无法加载程序集 mscorlib.dll。它应该已安装在 `usr/local/lib/mono/4.5' 目录中。 "
我可以进入生成此错误的代码(domain.c - mono_init_internal())。不幸的是,我的 mono 构建显然没有生成 4.5 目录。唯一可用的“.NET 版本”似乎是 2.0:存在 usr/local/lib/mono/2.0/mscorlib.dll,但根本没有 4.5 子目录。
我在构建中忘记了什么吗?
非常感谢您的支持。
c++ - 带有数据的 mono_add_internal_call
我正在尝试向单声道添加内部调用,如下所示:
内部调用应该调用带有一些数据的方法(指向本机的指针,AMX_NATIVE)。但是,无法在 lambda 代码中访问该值。
当您使用变量捕获( [&]() { ... } )时,无法将 lambda 代码转换为我需要调用 mono_add_internal_call 的 void *。
有人能想出解决这个问题的方法吗?
c++ - 嵌入 Mono:找不到 mono-2.0.dll
我在使用 VS2012 的 Windows 8.1 上。
我正在尝试按照http://www.mono-project.com/docs/advanced/embedding/将 Mono CLR 嵌入到 C 项目中。在一些问题之后,我现在正在编译它。我在文章中使用了 .def 文件: http: //github.com/mono/mono/blob/master/msvc/mono.def 注意这个文件说:LIBRARY mono-2.0.dll
当我运行它时,我得到一个无法找到 mono-2.0.dll 的错误。
我安装了 mono-3.2.3,但在任何地方都没有看到 mono-2.0.dll。
- 什么单声道 .dll 实现了 mono_xxx API(如 mono_jit_init)?
- 我是否需要设置 env-vars 以使操作系统知道单声道文件夹?
我有点担心文档指出 mono-2.0 是针对旧版本的,应该使用“mono”——但 mono.dll 也不存在......
winapi - 为什么加载链接到 libmonosgen-2.0 的 dll 时 Win32 API LoadLibrary 会失败?
我制作了一个嵌入 Mono Clr 的 win C/C++ dll - 目前只有几个调用。我已经使用 .def 文件(和一些调整)链接到调用以生成 .lib。这些调用位于名为 libmonosgen-2.0.dll 的文件中。没有显示找不到 libmonosgen-2.0.dll 的错误。
当我尝试使用 LoadLibrary Win32 API 使用 C/C++ 测试应用程序加载我的 .dll 时,它失败并显示代码 193/C1 - 错误图像。当我删除指向 libmonosgen-2.0.dll 的链接时,它再次加载正常。
我用 Dependency-Walker 查看了我的 dll,但没有奇怪的依赖项(所有 system32 的东西)。
我真的不知道为什么会存在这个问题。
PS:我无法将 Mono 嵌入代码放在 .exe 中,因为我正在构建插件 - 它必须是 .dll。
编辑:我混合了 32 位和 64 位图像。单声道安装是 32 位(至少 3.2.3)。
interface - 如何使用 Mono Embedding 调用接口方法?
我加载了一个程序集,并从中加载了我想要创建的对象的一个类。从那个类中我检查接口(mono_class_get_interfaces)并找到我想要的接口类(IDispose)。
我使用mono_object_new创建对象,然后直接调用mono_runtime_object_init。然后我调用mono_object_castclass_mbyref将对象转换为接口引用。然后我使用mono_class_get_method_from_name从接口类中检索我想调用的接口方法(Dispose)。
我调用mono_object_get_virtual_method以确保我有正确的实现,然后尝试使用接口MonoObject * 引用和接口虚拟方法MonoMethod * (args = NULL) ->使用mono_runtime_invoke调用它,但这是不成功的。
我也尝试使用相同的参数调用mono_method_get_unmanaged_thunk,但这也不起作用。
在这两种情况下,我都会为异常参数返回一个值。问题是,我还没有找到查看异常内部的方法......
问题是:
- 调用顺序是否正确以使用托管接口并调用正确的(最具体的)接口方法?
- 如何获取有关MonoException的更多信息(我假设调用返回的MonoObject * 是MonoException实例)?
c# - 将参数从 C 传递到 Embedded Mono
我正在尝试使用嵌入式单声道从 C 调用一个简单的 C# 类方法(如此处所述)。我可以调用该方法,但 C# 函数接收 0 作为参数,而不是我传入的数字。C# 函数返回一个结果,C 代码看到正确的结果 - 我只是无法传入参数。什么我做错了吗?
C# 程序集 (MonoSide.cs) 是:
这是C代码:
我正在使用这个 makefile 用 Dev-Cpp 编译它:
输出是:
(为什么要使用这些功能?这只是一个示例,我可以得到这个工作程序,而不是我的最终目标。)
编辑:
如果我将函数参数作为 C 代码中的指针传递,它就可以工作。C# 正确接收它。上述代码已从以下位置修改:
至:
对我来说,这意味着在 C 和 C# 之间传递更复杂的东西的最安全方法是通过缓冲区,在 C 和 C# 中使用匹配的序列化器和反序列化器。
mono - Mono 嵌入调用方法崩溃
我正在尝试从单声道的 C API 编译 C# 源代码。请在下面查看我的代码。
此代码在 MonoObject* pIcc = mono_runtime_invoke(pMethodCreateCompiler, pCodeProvider, NULL, NULL); 处失败;线。
我究竟做错了什么?
c# - Mono Embedded 迁移到 4.0.4 和进一步支持
我已从单声道 3.12 迁移到较新的单声道版本 4.0.4。 http://www.mono-project.com/news/2015/05/04/mono-4-0-is-out/ 有人能指点我一个基于新单声道 4.0.4 版本的单声道嵌入式教程吗?我尝试了我能找到的最简单的教程方法,当我想获得一个单域时,我每次都会遇到段错误:
项目.pro
单声道2.pc
主文件
程序输出: 本机堆栈跟踪: