繁体   English   中英

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

[英]How to query the mode of the VB6 IDE from C#

我是开源项目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(映射到'Run'),即使在设计或中断模式下也是如此。

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

所以我想出来了。 关键是这篇文章 ,没有它,我永远不会发现EbMode返回的值与VBA扩展性库中的EnvironmentMode枚举值不匹配。

EbMode的返回值为:0 =设计,1 =运行,2 =中断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM