提问人:LoneliNerd 提问时间:11/14/2023 最后编辑:LoneliNerd 更新时间:11/14/2023 访问量:33
如果项目和 C# dll 在不同的目录下C++如何正确使用 mono_add_internal_call
How to use mono_add_internal_call properly if C++ project and C# dll are under different directory
问:
我有一个 C++ 项目,想要在 C# dll 中调用函数,因此我遵循了单体文档,并在 C++ 项目中拥有以下代码:
static MonoString* Sample()
{
return mono_string_new(mono_domain_get(), "Hello CPP");
}
int main()
{
domain = mono_jit_init("MyGame");
MonoAssembly* assembly = mono_domain_assembly_open(domain, unity_main_dll_path);
image = mono_assembly_get_image(assembly);
mono_add_internal_call("Game.Call2Cpp::TestCall", Sample);
return 0;
}
然后,我在 C# 中有这段代码,它实际上是一个 unity 项目:
namespace Game
{
public class Call2Cpp : MonoBehaviour
{
[MethodImplAttribute(MethodImplOptions.InternalCall)]
static extern void TestCall();
void Update()
{
if(Input.GetKeyDown(KeyCode.T))
{
TestCall();
}
}
}
}
当我测试它时,我在 unity 运行时按“T”,它发生了错误:
MissingMethodException: assembly:<unknown assembly> type:<unknown type> member:(null)
Game.Call2Cpp.Update () (at Assets/Scripts/Game/Multiplayer/Call2Cpp.cs:26)
我想知道 C++ 项目和 Unity 项目可能在不同的目录下的原因:
C++ 项目路径是 /Project/Server/Main.cpp,Unity 项目在 /Project/Client 下,并且由于某些原因我无法将它们移动到同一目录下。但无论如何,我不确定这是否是真正的原因。
所以我的问题是:
是不是路径不同导致出现这个问题,在这种情况下如何正确使用“mono_add_internal_call”?
在这种情况下,是否有其他方法可以从 C++ 通过 mono 调用 C# 代码?
我想知道的是,我一开始对这个 mono api 的使用是不正确的,但是在谷歌上进行了相当多的搜索工作后,发现其他人就像我所做的那样调用了mono_add_internal_call,然后工作就完成了,似乎之前和之后没有更多的额外代码。
然后我删除了 Call2Cpp.cs 上的 Monobehavior,因为当我尝试从 C++ 调用 C# 时找不到该类,并且我从另一个脚本调用 Call2Cpp.TestCall(),但发生了同样的错误。
答: 暂无答案
评论
MethodImplAttribute
[DllImport ("PluginName")]
MethodImplAttribute