C++ 非托管代码和unity3d代码之间的双向通信

C++ 非托管代码和unity3d代码之间的双向通信,c++,mono,unity3d,C++,Mono,Unity3d,我有两个应用程序。其中一个是用Visual C++编写的,另一个是Unity应用程序,都在Windows上运行。在我的场景中,我想调用统一函数,每当用户按下我的C++应用程序中的一个按钮时,就绘制一个对象。到目前为止,我已经尝试通过调用C++代码,将统一可执行文件加载到同一个地址空间中。但是,它总是返回null,我无法调用mono\u jit\u exec来运行unity应用程序。这是否可以使用mono在这两个应用程序之间保持双向通信? 提前谢谢 这是我的一个老例子,基于。您想要的是将C++成员

我有两个应用程序。其中一个是用Visual C++编写的,另一个是Unity应用程序,都在Windows上运行。在我的场景中,我想调用统一函数,每当用户按下我的C++应用程序中的一个按钮时,就绘制一个对象。到目前为止,我已经尝试通过调用C++代码,将统一可执行文件加载到同一个地址空间中。但是,它总是返回null,我无法调用
mono\u jit\u exec
来运行unity应用程序。这是否可以使用mono在这两个应用程序之间保持双向通信?
提前谢谢

这是我的一个老例子,基于。您想要的是将C++成员委托作为函数指针传递给C++。您可以存储该函数指针以供按钮使用,或其他任何您想要的功能

C++DLL:

typedef int ( __stdcall *UnityCallback )( int );

static UnityCallback gCallBack;
extern "C" __declspec( dllexport )
inline int CallbackExample( UnityCallback unityFunctionPointer, int n )
{
    gCallBack = unityFunctionPointer;
    if( gCallBack )
    {
        return gCallBack( n );
    }
    return 0;
}
主叫人:

在我的例子中,C++ DLL立即调用C值回调,值为42。C++的回调将这个值增加1,并将其返回到C++,然后将其返回到C <代码> CallbackExample < /COD>调用站点。

统一不喜欢当你尝试访问主线程之外的引擎时,如果你的C++ DLL有异步调用返回到C,我不知道会发生什么。在我的示例中,调用从unity主线程开始,因此没有问题。我建议您不要在C#回调中使用任何特定于Unity的功能,而是使用回调来设置一个布尔值(或其他机制),以供

Update
使用,以实现Unity引擎中的任何功能

using UnityEngine;
using System;
using System.Runtime.InteropServices;

public class Callback : MonoBehaviour {
    public delegate int CallbackDelegate( int n );

    [DllImport ("UnityPluginCallback")]
    private static extern int CallbackExample(CallbackDelegate fp, int n);

    void Awake()
    {
        int result = CallbackExample(new CallbackDelegate(this.CallbackTest), 42);
        Debug.Log("Result from callback, should be 43: " + result);
    }


    int CallbackTest( int n )
    {
        Debug.Log("Received: " + n + " from C++ dll");
        return n+1;
    }
}