2014-07-15 46 views
1

我的應用程序有一個Excel前端。我正在使用VBA調用我的C/C++ DLL,它可以完成所有數字處理。 VBA用於在Excel和我的C++ dll之間進行數據通信,並生成圖表等。Excel VBA AllocConsole:在控制檯中選擇的文本後Dll例程凍結

在我的C++ dll中,我使用AllocConsole()函數來顯示控制檯窗口,其中顯示狀態更新和結果。每當我在控制檯窗口中選擇(使用鼠標)一些顯示的文本時,從Excel VBA調用的任何C++ dll函數(選擇後)都會凍結,並且我的應用程序變得無法響應。

我無法解決此問題。我不知道控制檯窗口中的選擇對我的應用程序造成什麼影響。

有關如何解決此問題的任何想法?

回答

1

沒有看到代碼,很難找出這種行爲的原因,但是有一種解決方法,您可以在代碼中使用該解決方法。

如果你有機會獲得DLL的源代碼,而不是給輸出到控制檯,輸出放到一個BSTR結構(其中使用VBA作爲字符串)。在「接收」一個VBA字符串

詳情請看這裏:http://msdn.microsoft.com/en-us/library/aa263531(v=vs.60).aspx

可以修改代碼來寫字符串返回VBA。

這樣,您將能夠使用VBA字符串並將其以VBA UserForm的形式放到您自己的控制檯中。

使用此方法的所有UI都將由Excel應用程序控制,並且只會調用數字部分的DLL。 這應該照顧凍結。如果不想使用字符串,可以將任意大小的字節數組指針傳遞給C++,其中它將結果作爲字符數組傳遞(VBA的byte與C++的char數據類型的大小相同)。這樣一來,就可以

  1. 傳遞一個「空」的字節數組到C++是
  2. 使用字節數組的第一個元素,通過引用傳遞「爲你的目的不夠長」,C++可以填充控制檯輸出和控制返回到VBA
  3. 然後
  4. VBA可以用來修剪/格式化輸出,並在控制檯窗口作爲Userform用大TextBox
+0

感謝您的建議,目前它。如果我無法理清控制檯問題,我正在考慮走這條路線。 –