2013-06-27 41 views
2

我正在學習DirectX,但我不太瞭解C++,因此我決定改用SharpDX。但我堅持在C++的這一部分,他們使用TypedEventHandler函數的地址,但我不知道如何在C#中編寫?誰能幫忙?如何將C++中的函數地址寫入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(); 
    } 

} 
+0

你在哪裏找到'裁判new'?這不合法。其餘的代碼是C++/CLI,而不是標準的C++。 C++/CLI應該非常直接地轉換成C#。 –

+0

@KenKin:不,C++/CLI使用'gcnew'。這是「C++/CX」嗎? –

+0

是的。修復標籤。 –

回答

6

你不需要爲C#事件wireup的 「本」 的說法:

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(); 
    } 
} 
+3

應該可以縮短到'AppView.Activated + = OnActivated;' –

+0

絕對(儘管這在舊版本的C#中不起作用)。 –