2012-08-07 45 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