【问题标题】:How do I write this address of a function from C++ to C#?如何将函数的这个地址从 C++ 写入 C#?
【发布时间】:2013-06-24 08:10:53
【问题描述】:

我正在学习 DirectX,但我不太了解 C++,所以我决定改用 SharpDX。但是我被困在 C++ 中的这一部分,他们使用 TypedEventHandler 中的函数地址,但我不知道如何在 C# 中编写它?有人可以帮忙吗?

ref class App sealed : public IFrameworkView
{
public:
virtual void Initialize(CoreApplicationView^ AppView)
{
    AppView->Activated += ref new TypedEventHandler
        <CoreApplicationView^, IActivatedEventArgs^>(this, &App::OnActivated);
}
virtual void SetWindow(CoreWindow^ Window) {}
virtual void Load(String^ EntryPoint) {}
virtual void Run() {}
virtual void Uninitialize() {}

void OnActivated(CoreApplicationView^ CoreAppView, IActivatedEventArgs^ Args)
{
    CoreWindow^ Window = CoreWindow::GetForCurrentThread();
    Window->Activate();
}
};

到目前为止我的转换

internal class App : IFrameworkView
{
    public void Initialize(CoreApplicationView AppView)
    {
        // Call OnActivated() when the Activated event is triggered
        AppView.Activated += new TypedEventHandler<CoreApplicationView, IActivatedEventArgs>(this,this.OnActivated);

    }
    public void SetWindow(CoreWindow Window) {}
    public void Load(String EntryPoint) {}
    public void Run() {}
    public void Uninitialize() {}

    public void OnActivated(CoreApplicationView CoreAppView, IActivatedEventArgs Args)
    {
        CoreWindow Window = CoreWindow.GetForCurrentThread();
        Window.Activate();
    }

}

【问题讨论】:

  • 你在哪里找到ref new?那是不合法的。您的其余代码是 C++/CLI,而不是标准 C++。 C++/CLI 应该很容易翻译成 C#。
  • @KenKin:不,C++/CLI 使用gcnew。这是C++/CX吗?
  • 是的。修复标签。
  • 适用于 Windows 应用商店应用的 C++/CX
  • @erotavlas:最好在问题中说明这一点,但现在它已重新标记。

标签: c# windows-runtime directx c++-cx


【解决方案1】:

C# 事件连线不需要“this”参数:

public sealed class App : IFrameworkView
{
    public virtual void Initialize(CoreApplicationView AppView)
    {
        AppView.Activated += new TypedEventHandler <CoreApplicationView, IActivatedEventArgs>(OnActivated);
    }

    public virtual void SetWindow(CoreWindow Window)
    {
    }
    public virtual void Load(string EntryPoint)
    {
    }
    public virtual void Run()
    {
    }
    public virtual void Uninitialize()
    {
    }

    public void OnActivated(CoreApplicationView CoreAppView, IActivatedEventArgs Args)
    {
        CoreWindow Window = CoreWindow.GetForCurrentThread();
        Window.Activate();
    }
}

【讨论】:

  • 应该可以将其缩短为AppView.Activated += OnActivated;
  • 绝对可以(尽管这在旧版本的 C# 中不起作用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 2015-04-18
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
相关资源
最近更新 更多