Excel VBA AllocConsole:在控制台中选择文本后,Dll例程冻结
Excel VBA AllocConsole: Dll routine freezes after text selected in Console
我的应用程序有一个Excel前端。我使用VBA来调用我的C/c++ dll,它可以处理所有的数字。VBA用于Excel和我的c++ dll之间的数据通信,并生成绘图等。
在我的c++ dll中,我使用AllocConsole()
函数来显示控制台窗口,其中我显示状态更新和结果。
无论何时,我选择(使用鼠标)控制台窗口中显示的一些文本;从Excel VBA调用的任何c++ dll函数(在选择之后)冻结,我的应用程序变得无响应。
我无法解决这个问题。我不知道控制台窗口中的选择对我的应用程序造成了什么影响。
对如何解决这个问题有什么想法吗?
在看不到代码的情况下,很难确定这种行为的原因,但是有一个解决方法,您可以在代码中使用它。
如果您可以访问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
数据类型)。这样,你就可以
- 向c++传递一个'空'字节数组,该数组"足够长" 使用字节数组的第一个元素,通过引用传递,c++可以填充控制台输出并将控制返回给VBAVBA可以用来修剪/重新格式化输出,并将其呈现在控制台窗口作为
Userform
与大TextBox
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- DLL 纯文本说明
- DLL 注入:DrawText 和 TextOut 不会返回所有文本
- 读取 dll 文件中的文本文件
- 如何将 c++ dll printf 导入 c# 文本框
- P/Invoke in ASP.NET (从 dll 读取/写入文本文件)
- Excel VBA AllocConsole:在控制台中选择文本后,Dll例程冻结