Java与C++的互相调用很容易做到,有好几种方式实现,如 JNI , JNA 方式 ,而C# 与C++之间的相互调用就有点麻烦了,一般情况下是C#调用C++ ,C++却无法调用C# 。本人就是为了解决C++ 调用C#的问题,也就是可以实现C#调用C++,然后C++再回调C# 。本人搜索了大量的网络文章,却没有找到有效方法,偶然间在Steamwork.Net的源码里发现了 可行的方法,并经项目实际使用验证可行 。
具体实现例子请看下面的代码
C#端,回调实现:
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
namespace IPInvoke
{
public class CallbackInvoke
{
static CallbackInvoke ()
{
}
internal const string NativeLibraryName = "NativeTest";
[DllImport(NativeLibraryName, EntryPoint = "RegisterCallback")]
public static extern void RegCallback(IntPtr cbPtr);
[DllImport(NativeLibraryName, EntryPoint = "UnregisterCallback")]
public static extern void UnregisterCallback();
[DllImport(NativeLibraryName, EntryPoint = "GetUser")]
public static extern void GetUser(int uid);
[DllImport(NativeLibraryName, EntryPoint = "RequestGameInfo")]
public static extern void RequestGameInfo (int gameId);
private static Dictionary<Type,IDisposable> mDisposes = new Dictionary<Type,IDisposable>();
public delegate void DispatchDelegate<T>(T param);
public static void RegisterCallback<T>(DispatchDelegate<T> callback){
Type t =