在C#程序中使用COM服务器接口来控制Vector Canoe项目

问题描述

我试图在C#程序中使用 COM服务器接口在Canoe项目中运行特定的测试模块 ------> 鉴于此: 我正在使用

  1. 矢量独木舟11-SP3(64位)。
  2. Visual Studio 2017。

我尝试遵循 Vector-Canoe 技术帮助中的 COM对象的层次结构,但我不断遇到异常(例如:在in中没有称为x的方法对象Y)。

我进行了很多搜索,但似乎以前没有人遇到过这个问题。

最后,我决定将对象的名称打印到控制台窗口,结果发现我在控制台窗口输出中获得的名称​​与不符在 Vector-Canoe 技术帮助中。例如,我得到:

  • ICAPL5 而不是 CAPL
  • ITestEnvironments ,而不是 TestEnvironments
  • ITestEnvironment2 而不是 TestEnvironment -等等...。

这是我的C#代码段:

using System;
using Vector.Tools;
using Vector.CANoe.Runtime;
using Vector.CANoe.sockets;
using Vector.CANoe.Threading;
using Vector.Diagnostics;
using Vector.Scripting.UI;
using Vector.CANoe.TFS;
using Vector.CANoe.VTS;
using ASAM.HILAPI.Interfaces;
using ASAM.HILAPI.Implementation;
using Vector.CANoe.ASAM.HILAPI;
using NetworkDB;
using System.IO;

public class Canoe_autoFlash : TestModule
{
    private CANoe.Application mCANoeApp;
    
    private CANoe.Measurement mCANoeMeasurement;
    
    private CANoe.CAPL CANoeCAPL;
    
    private CANoe.TestEnvironments mTestEnvironments;
    
    public Canoe_autoFlash()  // Constructor
    {
        //1. Initialize mCANoeApp:
        mCANoeApp = new CANoe.Application();
    
        //2. Initialize mCANoeMeasurement:
        mCANoeMeasurement = (CANoe.Measurement) mCANoeApp.Measurement;
        Console.WriteLine("mCANoeMeasurement object: " + Microsoft.VisualBasic.information.TypeName(mCANoeMeasurement));
        
        //3. Initialize CANoeCAPL:
        CANoeCAPL = (CANoe.CAPL) mCANoeApp.CAPL;
        Console.WriteLine("CANoeCAPL object: " + Microsoft.VisualBasic.information.TypeName(CANoeCAPL));
    
        //4. Initialize mTestEnvironments:
        mTestEnvironments = (CANoe.TestEnvironments) mCANoeApp.Configuration.TestSetup.TestEnvironments;
    }
    
    public void get_actual_objects_names() // This function is for debugging
    {
        Console.WriteLine("mTestEnvironments object: " + Microsoft.VisualBasic.information.TypeName(mTestEnvironments));
    
        Console.WriteLine("TestEnvironment object: " + Microsoft.VisualBasic.information.TypeName(mTestEnvironments[1]));
    
        Console.WriteLine("TestEnvironment object Item 1 name : " + ((CANoe.TestEnvironment) mTestEnvironments[1]).Name );
    }

这是控制台窗口的输出显示了奇怪的对象的名称

mCANoeMeasurement object: MeasurementClass
CANoeCAPL object: ICAPL5
Number of Test Envs = 1
mTestEnvironments object: ITestEnvironments
TestEnvironment object: ITestEnvironment2

这是由于以下代码行而导致的异常:

Console.WriteLine("TestEnvironment object Item 1 name : " + ((CANoe.TestEnvironment) mTestEnvironments[1]).Name );

例外是: System.Runtime.InteropServices.COMException:“找不到测试环境对象。”

如果您让我理解这些奇怪的对象名称背后的原因以及如何获取正确的对象,我将不胜感激,这样一来,遵循Vector-Canoe帮助中的对象层次结构就不会有任何问题

解决方法

您所获得的“怪异”名称只是表示随着时间而发展的接口名称。

从CAPL开始,当添加了新功能时,Vector无法更改现有接口,因为这会破坏向后兼容性。因此,他们添加了ICAPL。下一个版本是ICAPL1,依此类推。

此接口由CANoe.CAPL对象提供。您不必在乎界面的确切版本。

关于您遇到的异常,我认为这是因为您尝试访问Devon Test环境(索引1),而只有一个Test环境。

对于其他问题,对象Y上没有方法X ,您必须提供更多详细信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...