gpt4 book ai didi

c++ - Excel VBA 分配控制台 : Dll routine freezes after text selected in Console

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:00 24 4
gpt4 key购买 nike

我的应用程序有一个 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 数据类型)。这样,您就可以

  1. 将“空”字节数组传递给 C++,该数组“对于您的目的而言足够长”
  2. 使用字节数组的第一个元素,通过引用传递,C++ 可以填充控制台输出并将控制返回给 VBA
  3. 然后可以使用 VBA 修剪/重新格式化输出,并将其作为带有大 TextBoxUserform 显示在控制台窗口中

关于c++ - Excel VBA 分配控制台 : Dll routine freezes after text selected in Console,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24758795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com