2012-08-07 60 views
2

我有一個DLL導出插槽和功能,我也有一些信號,從一些私人函數發出的DLL。該DLL是一個COM組件,如果這有助於任何事情。連接Qt信號在DLL與C#應用程序

首先,我已經導出完整的QT類,並且可以在Visual Studio 2010中添加參考時看到我的公共插槽和函數,但看不到信號(不知道我是否應該) 。他們用「Q_SIGNALS」聲明。

我想要的是將這些信號之一連接到我的C#項目中的一個方法,就像在QT中插入信號一樣,但現在我需要類似「signal(QT)」到「method(C#)」的信號,這可能嗎?任何幫助表示讚賞。

C++ (Qt) 
signals: 
    void mySignal(const QString& path); 

應該連接到:

C# (VS2010) 
void myFunction(string path); 
+0

有可用於Qt的C#綁定可能可以解決此問題。 (我認爲綁定項目被稱爲京都。) – 2012-08-07 13:59:36

回答

1

你沒有看到在出口的Qt類的信號,因爲它們不是類的功能。這不是任何C(++)聲明。只是一個命名的佔位符,Qt預處理器用於生成調用代碼,以防信號實際連接到某個地方。信號可以成爲兩種不同但簡單的事情,具體取決於線程上下文。是否在將信號發送對象的生活在相同的線程中接收對象:

  1. 它的作用:編譯爲簡單的直接方法調用
  2. 它不:槽呼叫被存儲在接收器的消息隊列中,並且執行接收者的線程返回到消息循環。然後,「槽」就是所謂的「事件處理程序」

因此,對於案例1,實際上根本不需要Qt語法糖。只需從Qt的角度調用你的C#方法,你會做emit mySignal()。然而,情況2不能像Qt那樣簡單,因爲接收方必須繼承QObject(我不知道在C#中可能)。你仍然可以使用處理程序來處理你自己的消息循環,但Qt不會幫助你。

+0

okey,我得到了,我也注意到了這一點。我怎樣才能「從我的qt dll簡單地調用我的C#方法」?我想你是指某種回調方法?我現在試着用我的COM DLL,但每次我添加一個typedef到我的參數列表功能消失從導出列表... – 2012-08-07 14:04:11

+0

你在哪裏添加typedef?什麼功能消失?如果你的基於Qt的DLL是一個COM,你不能使用COM進行互操作麼?我幾乎不瞭解COM。 – 2012-08-13 14:32:20