【问题标题】:Call method from interface or abstract class within static void从静态 void 中的接口或抽象类调用方法
【发布时间】:2019-02-01 19:40:12
【问题描述】:

我通常是一名 javascript 开发人员,但对于我的公司而言,我刚刚开始学习 c#,以便使用 CimatronE 13 API 为这个 3D 建模软件开发自定义命令行 PDM 工具。

随着我对编程语言的理解不断进步,出现了一种令人沮丧的情况,我想使用 API 端点方法,但无法使其正常工作。

Cimatron 文档说明如下:

IPdm::GetRelatedDocuments

语法:RelatedDocuments = GetRelatedDocuments (DocumentPath);

此方法允许您从复合类型的文件中获取相关文件,例如 Assembly 或 Drawing。

输入:(字符串)文档路径, 文件路径。例如 \Documents\Location\Folder\Document。该文件必须是装配体或工程图。

返回:(变体)RelatedDocuments, 变体类型数组,其中每个元素包含与所选文件相关的二维字符串类型数组。


这对我来说看起来很简单,所以我尝试从 static void Main() 方法中以多种方式调用它,但我不断收到错误:

var RelatedDocuments = interop.CimBaseAPI.IPdm.GetRelatedDocuments("path");

CS0120:非静态字段、方法或属性“IPdm.GetRelatedDocuments(string)”需要对象引用

interop.CimBaseAPI.IPdm pdm = new interop.CimBaseAPI.IPdm();
var RelatedDocuments = pdm.GetRelatedDocuments("path");

CS0144:无法创建抽象类或接口“IPdm”的实例

有什么想法吗?这可能很简单,但我仍然是 c# 的菜鸟:p


编辑:

关于接口interop.CimBaseAPI.IPdm的Cimatron文档:

属性:

获取 查询(字符串、DocumentEnumType、DocumentEnumUnit) 变体

方法:

很多,包括Variant GetRelatedDocuments ( String )

【问题讨论】:

  • 供应商没有提供如何使用其产品的示例吗?如果IPdm 类是抽象类或接口,那么您确实不能直接创建它的实例。但大概他们会有一个实现IPdm 类/接口的类。
  • 查看文档是否有实现IPdm的类型
  • interop.CimBaseAPI.IPdm 是类还是接口?
  • 也许你需要先调用GetPdm( ),然后在返回的实例上调用GetRelatedDocuments(path)
  • 感谢您的回复!不幸的是,他们的文档真的很差,而且他们没有提供示例(它们确实很有帮助)。 @vc74:interop.CimBaseAPI.IPdm 是一个接口。 @linuxrocks:GetPdm() 是什么意思。

标签: c# class methods interface static


【解决方案1】:

正如我现在所看到的...interop.CimatronE.IPdm 是一个接口,为了使用它的方法,我们首先需要访问 Cimatron 应用程序。使用应用程序对象,我们可以使用它的方法来获取所需的接口,例如IPdm,并使用它们的方法。

以下代码在编译器中没有出现错误,但在执行时会出现错误。这似乎与 CimatronE 的第 13 版有关,因为应用程序对象在使用第 12 版时工作得很好。这些版本之间发生了很多变化,我认为这是 API 无法正常运行的原因,已经过时了。

interop.CimAppAccess.AppAccess AppAcc = new interop.CimAppAccess.AppAccess();
interop.CimatronE.IApplication CimApp = /*(interop.CimatronE.IApplication)*/AppAcc.GetApplication();

interop.CimatronE.IPdm pdm = CimApp.GetPdm();

var RelatedDocuments = pdm.GetRelatedDocuments("path");
Console.WriteLine(RelatedDocuments);

如果我错了,请纠正我! (因为我刚开始还在学习c#)

【讨论】:

    【解决方案2】:

    我在使用 Cimatron 14 时遇到了同样的问题。 我需要在 Visual Studio 中进行一些更改,以使 Cimatron 能够正常运行。

    • 以管理员模式运行 Visual Studio
    • 将您的调试和发布解决方案平台设置为“x64”
    • 还建议将发布和调试的构建路径指向与 Cimatron 引用相同的文件夹。在我的情况下,'C:\Program Files\3D Systems\Cimatron\14.0\Program'。但是,如果没有这个,我的代码似乎运行良好。

    我使用此代码 (VB.Net) 创建了 Cimatron 应用程序:

        Dim gAppAccess As New CIMAPPACCESSLib.AppAccess 'Define an AppAccess object to get running active application
        Dim gApp As CIMAPPACCESSLib.Application 'Define an Application object
        gApp = gAppAccess.GetApplication 'Getting running active application
        If gApp Is Nothing Then
            gApp = New CIMAPPACCESSLib.Application 'Creating a new instance of a Cimatron application
        End If
    

    参考:Interop.CIMAPPACCESSLib.dll & interop.CimServicesAPI.dll

    据我了解,Cimatron 15 可能还需要一些明显的更改。

    Cimatron 模块 > Cimaton SDK 下的 Cimatron 程序中有一些帮助信息,可能会有一些帮助。

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2023-02-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      相关资源
      最近更新 更多