您可以做的就是在 C# 中保留一个指向函数的函数指针。您可以从 C# 调用本机 C++ 来存储函数指针,然后您可以随时调用它。函数是静态的。
例如在 C#
[DllImport( @"SomeDLL.dll" )]
static extern void SetAchievementUnlocked( AchievementUnlockCallBack callback );
public delegate int AchievementUnlockCallBack( AchievementsType id, IntPtr message );
static AchievementUnlockCallBack mAchievementUnlockCallBack = AchievementUnlocked;
static int AchievementUnlocked( AchievementsType id, IntPtr pMessage )
{
string achievementName = Marshal.PtrToStringAnsi( pMessage );
DisplayAchievement( achievementName );
MainWindowHandler.Context.Focus();
return 1;
}
并且可能在构造函数中
SetAchievementUnlocked( mAchievementUnlockCallBack );
然后在 C++ 中
typedef int (*AchievementUnlockCallBack)(AchievementsType pType, char* pMessage);
AchievementUnlockCallBack globalCallback = NULL;
__declspec(dllexport) void SetAchievementUnlocked( AchievementUnlockCallBack callback )
{
globalCallback = callback
}
然后在您可以访问该变量的任何地方
void Achievement::Unlock()
{
if(globalCallback)
{
globalCallback(this->getType(), this->getName().c_str());
}
}
希望这可以帮助你。如果您不使用 dll 和互操作服务,它可能会起作用,但不幸的是我没有测试过并且没有示例。