[英]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.