原來的問題如何手動運行位於C消息泵++
我們的應用程序使用CSocket類要求的消息泵是爲了運行爲它工作。目前,切換到另一個套接字實現是不切實際的,儘管這是我們最終想要達成的目標。
該應用程序是在Visual C++(NOT管理)。
我們目前通過使用C#.NET服務啓動器啓動C++ DLL,該啓動器使用Application.Run啓動線程以獲取消息泵,然後使用DllImport在我們的DLL中啓動啓動方法。
有許多問題與此相關,最緊迫的就是一個如果DLL崩潰因任何原因,我們沒有得到一個轉儲文件!
由於這一結果,我們切換到C++服務啓動,雖然我們很好用它的服務方面我們是如何得到的消息泵會有點難倒。
我看了一下谷歌和這裏的一些問題,但我的問題的一部分是缺乏基本的C++知識,所以如果這是一個愚蠢的問題,如果有人可以指出我正確的方向,將非常讚賞道歉。
提前感謝 馬特Peddlesden
更多信息
,我們試圖取代目前的C#的服務確實基本上是這樣的:
public void PumpThread()
{
DLLStart();
Application.Run();
}
protected override void OnStart(string[] args)
{
try
{
Thread pumpThread = new Thread(new ThreadStart(PumpThread));
pumpThread.IsBackground = true;
pumpThread.Start();
}
catch (DllNotFoundException dnfe)
{
}
catch (Exception e)
{
}
}
protected override void OnStop()
{
try
{
DLLStop();
}
catch (DllNotFoundException dnfe)
{
}
catch (Exception e)
{
}
}
基本上我們只是想用C++替換上述C#.NET Windows服務,以便我們的代碼完全在非託管環境中運行,而不是不必要地混淆用5行託管代碼執行此操作。
DLLStart()和DLLStop()是從我們的C +非託管的DLL,實際上啓動和停止的系統導入兩種功能。
我不完全確定什麼種類這將需要是爲了能夠做任何事情與泵或老實說。
希望這些額外的數據是非常有用的。
請注意,這是線程消息隊列。我不完全確定OP是否意識到消息被傳遞給線程,因此產生一個單獨的線程來處理傳入的消息是行不通的。 – 2011-06-14 09:41:21
@Simon - 不知道我跟着你...你能擴張嗎? C#發射器肯定是在做我們想要的東西,但很可能我錯過了一些重要的東西:) – 2011-06-14 10:26:21
非常感謝您抽出寶貴的時間,我們將會爲此付出努力,看看會發生什麼。 – 2011-06-14 10:27:30