【问题标题】:Using COM Server Interfaces in C# program to control a Vector Canoe project在 C# 程序中使用 COM 服务器接口来控制 Vector Canoe 项目
【发布时间】:2020-12-05 11:09:02
【问题描述】:

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

  1. Vector-Canoe 11 - SP3(64 位)。
  2. Visual Studio 2017。

我尝试遵循 Vector-Canoe 技术帮助中的 COM 对象层次结构,但我不断收到异常(例如:在对象 Y)。

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

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

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

这是我的 C# 代码 sn-ps:

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 帮助中遵循对象层次结构时就不会遇到问题

【问题讨论】:

  • 您好,欢迎来到堆栈溢出。您的帖子出现在审核队列中,因此我修复了您的代码格式以使其可读。有关格式指南,请参阅 How do I format my code blocks?。我还添加了必要的标签canoe。由于您对一个非常具体的主题有疑问,因此您需要正确标记它以吸引该主题的专家。请参阅:What are tags, and how should I use them?。祝你好运。
  • 您还写道,这是由于代码行引起的异常——但我没有看到异常,只有代码本身。请edit您的帖子包含异常的完整ToString()输出(作为文本,而不是作为图像),包括异常类型、消息、回溯和内部异常(如果有)?
  • 我添加了例外,非常感谢。我希望我能得到解决方案

标签: c# com canoe


【解决方案1】:

你得到的“奇怪”名称只是表示随着时间演变的接口的名称。

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

此接口由 CANoe.CAPL 对象提供。您不应该关心界面的确切版本。

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

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

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 2012-01-06
    • 2019-09-17
    • 1970-01-01
    • 2014-02-19
    • 2017-06-19
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多