none
C++ Dialog 使用 c# windows Form 。 如何在從C# 呼叫回 C++ Dialog? RRS feed

  • 問題

  • 不好意思,想請問一下各位前輩。

    我是在MFC C++ Dialog使用了 C# Windows form

    (參考 MSDN: 將 Windows Form 使用者控制項裝載至 MFC 對話方塊中)

    所以從 C++ Dialog  ----> C# Windows form 這條路是ok了。

    可以透過DDX/DDV 呼叫C# 的Function

    但是?反過來呢,此時我想從C#呼叫回來C++ Dialog的Function呢?

    (Ex: 在C# windows form中有一個Timer,觸發時,我想要呼叫C++ 的Dialog。)
    舉例,但不想透過下面這種方式,想要用呼叫C++ Dialog的Function。
    (參考 MSDN :HOW TO:從原生 C++ 類別接收 Windows Form 事件)

    上網查了一些從C#呼叫回C++的方式,怎麼好像都跟DLL有關,抑或是使用VC class library

    有點不解,原本的用途是想用MFC C++透過CLR處理C#,那這樣不又要從C#在透過DLL處理回來?有點吊詭。

    不好意思,想請問各位大大解惑。


    • 已編輯 我是貓 2013年10月23日 上午 07:35
    2013年10月23日 上午 07:34

解答

所有回覆

  • C++ Dialog要拿給C#程式使用, 必須製作成DLL, 並提供C程式的語法介面, 或是製作成ActiveX格式, 才能夠被C#程式所使用
    2013年10月23日 上午 08:05
  • 感謝您的回答!真的不好意思,如果不忙的話
    想繼續請問說,是C++ Dialog必須做成DLL,還是只C++ Class也是要做成DLL,並有以上的方式,才能供C#使用。

    還是我這觀念是否有錯誤呢?
    那如果C++(exe)使用C#(dll),就可以從C++呼叫到C#的dll,但無法從C#呼叫回C++?
    反之,若C#(exe)使用C++(dll),就可以從C#呼叫到C++的dll,但也無法從C++呼叫回C#?

    有沒有辦法,在C++(exe)使用C#(dll)的方式,同時c#又可以callback回來
    ex:像是父與子class,老爸把它的位置傳進給孩子,孩子借由這關係再call老爸。
    2013年10月23日 上午 08:41
  • 後來我使用delegate就可以成功從C# Callback回來了!
    感謝各位指教。

    • 已提議為解答 ThankfulHeart 2013年10月24日 上午 04:48
    • 已標示為解答 我是貓 2013年10月25日 上午 07:44
    2013年10月24日 上午 04:36
  • 要是可以貢獻一些代碼就好了……

    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    2013年10月24日 上午 04:49
  • 1. C++的Dialog本身就是class, 所以是class做成DLL

    2. 您己經用delegate做了Callback了, 這個做法是可行的

    2013年10月24日 上午 07:04
  • Sorry 我貼一下代碼 因為也還正在釐清觀念。謝謝大家 XDD

    c#
    public delegate void MFCCallBack();
    public static event MFCCallBack onMFCCallBack = null;

    c++
    m_ctrl1->onMFCCallBack += gcnew MFCCallBack((C++的Class Function));

    這樣就C#就可以透過呼叫onMFCCallBack()來觸發了。

    • 已提議為解答 ThankfulHeart 2013年10月26日 上午 07:22
    2013年10月25日 上午 07:39
  • 謝謝您的回答!!! 我會記下來的。
    2013年10月25日 上午 07:43