在 Mono 中向 C# 公开C++:函数转换无效
Exposing C++ to C# in Mono: invalid conversion of function?
我正在通过将Mono嵌入到Windows的C++程序中来编写插件系统。现在,我正在尝试向 C# 运行时公开一个C++函数,以便脚本可以从主程序调用C++函数。
这是这样完成的:
mono_add_internal_call("Hello::MonoMsg",MonoMsg);
我几乎煮熟了两个示例的复制面,并且都遇到相同的错误:
C:ProjectsMonoTestBedmain.cpp|34|error: invalid conversion from 'void (*)(MonoString*)' to 'const void*'|
C:ProjectsMonoTestBedmain.cpp|34|error: initializing argument 2 of 'void mono_add_internal_call(const char*, const void*)'|
现在,我找到了一个人关于这个/某处/的帖子,但我没有找到解决方案,只有一种方法可以编译它 - 将 MonoMsg 转换为 (void*)MonoMsg。这会让它编译,但当你运行它时它会崩溃,崩溃 kerblam - 它会报告找不到该函数。
这是相关的代码,包括以防万一你也想要它。
#include <iostream>
#include <stdio.h>
#include <string>
#include<mono/jit/jit.h>
#include<mono/metadata/assembly.h>
#include <mono/metadata/mono-config.h>
#include <mono/metadata/mono-debug.h>
#include <mono/metadata/debug-helpers.h>
#include <mono/metadata/appdomain.h>
#include <mono/metadata/object.h>
#include <mono/metadata/threads.h>
#include <mono/metadata/environment.h>
#include <mono/metadata/mono-gc.h>
using namespace std;
__declspec(dllexport) void MonoMsg(MonoString *msg)
{
cout<<msg;
}
int main(int argc, char *argv)
{
// mono_set_dirs(NULL,NULL);
// mono_config_parse(NULL);
MonoDomain *domain = mono_jit_init("C:\herro.exe");
MonoAssembly *assembly= mono_domain_assembly_open(domain,"C:\herro.exe");
cout<<assembly;
//mono_jit_exec(domain,assembly,0,NULL);
mono_add_internal_call("Hello::MonoMsg",MonoMsg);
. . .
编辑:我差点忘了提到这是某种,呃,P/调用方法?什么的。
使代码正常工作所需的更改:
main
argv
论点是char**
- 您应该将
argc
和argv
传递给mono_jit_exec
- 在调用
mono_jit_exec
之前,应添加内部调用
像这样:
int main(int argc, char **argv)
{
MonoDomain *domain = mono_jit_init("C:\herro.exe");
MonoAssembly *assembly= mono_domain_assembly_open(domain,"C:\herro.exe");
cout<<assembly;
mono_add_internal_call("Hello::MonoMsg",MonoMsg);
mono_jit_exec(domain,assembly,argc,argv);
您忘了指定命名空间。 假设您在 YourAssembly
命名空间中编译了 Hello
类,以下更正将修复它。
mono_add_internal_call("YourAssembly.Hello::MonoMsg",MonoMsg);
相关文章:
- 如何使用Rcpp将R函数转换为C++函数
- C++函数转换为 C# 函数
- 将 C 函数转换为 C++ 以检查数字是否有效
- C++:从重载函数转换为 std::function
- 将 C 函数转换为C++语言
- C++隐式构造函数转换,后跟类型向上转换
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 如何将函数转换为 lambda 函数
- 自定义函数转换错误?
- 将 C# 哈希函数转换为C++
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- 加快 R 性能或将 R 函数转换为C++函数
- 将成员函数转换为指向成员函数的指针
- 将MATLAB炒作函数转换为C
- Rcpp - 用二进制函数转换数字向量?
- C lambda函数转换误差
- 此语法中的构造函数转换错误
- 将函数转换为find_if lambda