2008-12-29 64 views
1

我編寫了一個設備控制器(rs232),並且它正在成功使用,但是用戶想要從Excel中查看數據並控制設備(或者可能通過我的程序進行通信)。我認爲DDE是一個選項,並且發現RTD(IRtdServer)可能是一個好的開始(儘管沒有辦法從實時數據客戶端將數據發回「服務器」)。將命令從Excel發送到應用程序? COM?

我發現這些資源的RTD部分: http://support.microsoft.com/?id=327215http://support.microsoft.com/?id=327215

這是一個多線程的應用程序,我已經加入到擁有COM端口的多個監聽器,這樣我可以更新的能力多個客戶。我將添加COM接口到EXE。

但我需要什麼之後那就是通過從Excel我的應用程序的控制我的應用程序/代理命令發送到設備的某種方式。

什麼是最好的方法來做到這一點?

也許另一個COM接口並從VBA調用它?我不熟悉從Excel中使用腳本,所以也許有人可以提供示例代碼或鏈接,顯示COM對象和隨附的VB(A?)代碼的代碼?

請記住,這是一個非託管C++應用程序,它不能被轉換爲管理或C#現在。使用C#的替代方案也受到歡迎,但這是一個長期的重寫。

由於

EDIT 我不得不添加COM支持到現有的EXE的替代方案。我認爲添加雙向通信更靈活(跨平臺 - 也許提升或corba或基於我自己的消息協議的直接IP)

一個COM服務器(或兩個)可以包裝該通信信道 - 無論它是。這並沒有真正影響我的問題 - 我仍然想知道從Excel控制外部EXE的選項。

編輯 不必.NET推出給客戶也是一個大利好。許多這些設備都在PC上,很舊,可能有NT或XP,我不贊同將我的安裝/安裝包從700KB增加到荒謬的.NET安裝大小...

回答

1

選項# 1:

創建一個小的COM服務器 - 確保其接口適用於在Excel內置的Visual Basic腳本引擎。 (例如使用簡單類型和BSTRS)。

寫入Excel的VB宏(1)添加自己的工具欄到Excel和(2)調用你的COM服務器。

您還可以添加按鈕和其他UI元素表和他們掛鉤起來,以VB宏。

選項#2:

我知道你不希望使用C# - 但自動化辦公,再跟COM對象是真的,在C#和Visual Studio Tools for Office中很容易(VSTO) 。你真的看着這個選項 - 如果做得對,它不應該重寫你現有的任何代碼。只需使用C#和VSTO作爲Excel和RTD服務器之間的橋樑。與VB一樣,它直接將Excel中的UI元素連接到C#,然後連接到RTD服務器。

+0

我認爲你是對的C#方面。這會讓事情變得更簡單。我可以從我現有的應用程序中提供一些基本的進程間通信,然後用C#構建Excel /自動化作品。 – Tim 2008-12-29 04:55:55

1

從VBA調用COM對象很簡單。這個SO Question and my answer給出了一個如何創建一個COM對象的例子。調用暴露的方法是你所期望的:

object.ExposedMethod(optional params...); 
相關問題