c# - 如何从C#查询VB6 IDE的模式

标签 c# vb6 vbe

我是开源项目的贡献者 Rubberduck ,并希望添加对独立 VB6 IDE 的支持(它目前支持 VBA)。

我们需要从 IDE 获得的一条信息是它当前所处的模式 - 设计、中断或运行。在 VBA 方面,这由可扩展性 API 公开,但不幸的是,对于 VB6 而言并非如此。因此,我只能尝试寻找其他方法来查询此信息。

我原以为可以通过简单地检查主窗口的标题来“作弊”——它将模式附加到标题栏中的项目名称。不幸的是,这是不切实际的,因为文本会针对国际版本的 IDE 进行本地化。

我认为解决方案在于 vba6.dll 的 EbMode 函数(此处的“a”具有误导性,存在是出于兼容性原因)。谷歌搜索“EbMode VB6”显示了这方面的大量实践示例。

因此我尝试了以下方法:

public class Test
{
    private const string DllName = "vba6.dll";  // Not considering VB5 for now
    [DllImport(DllName)]
    private static extern int EbMode();

    public EnvironmentMode Mode => (EnvironmentMode)EbMode();
}

public enum EnvironmentMode
{
    Run = 0,
    Break = 1,
    Design = 2
}

这会执行并返回一个值,不幸的是它总是返回 0(映射到“运行”),即使在设计或中断模式下也是如此。

我的挑战是我能找到的公共(public)代码都是为非托管代码编写的(主要是 VB6,并且通常包括内联汇编)。其中一些示例在调用函数之前应用了某种补丁,我认为这可能是我所缺少的。但我不确定如何在托管代码中继续。

最佳答案

所以我想通了。关键是this post ,否则我永远不会发现 EbMode 返回的值与 VBA 扩展库中的 EnvironmentMode 枚举的值不匹配。

EbMode 的返回值为:0=Design,1=Run,2=Break。

关于c# - 如何从C#查询VB6 IDE的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50866331/

相关文章:

c# - 进行基础连接时,asp.net 页面加载两次

vb6 - 如何改变vb6中的列位置?

framebuffer - grub2、grub-mkrescue、BIOS、vbe 帧缓冲区、自定义内核

vba - 确定VBE是否打开

python - 使用 Python 将宏注入(inject)电子表格

c# - 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

c# - 程序化 RDP 登录和 SendMessage

c# - c#中两位小数的数字分组

visual-studio - 我在哪里可以获得 VB6 IDE

events - 过程声明与同名事件或过程的描述不匹配