1

私は Python を使用して、Solidworks でいくつかの反復動作のスクリプト作成に取り組んできました。私はwin32comライブラリを調べようとしてしばらく時間を費やし、なんとか多くの作業を行うことができましたが、障害に遭遇しました. だから私は今、Iron Python 経由で API を制御しようとしています。ローリングしようとしているだけで、問題が発生しました。以下のコードを実行しようとしました。

import clr
clr.AddReferenceToFileAndPath('..\\Redist\\SolidWorks.Interop.sldworks.dll')
clr.AddReference('SolidWorks.Interop.swconst')
from SolidWorks.Interop import sldworks
from SolidWorks.Interop import swconst

print sldworks
swApp = sldworks.ISldWorks()
swApp.Visible = True

このコードを実行すると、「TypeError: 抽象的であるため、ISldWorks のインスタンスを作成できません」というメッセージが表示されます。

ここで SolidWorks のドキュメント を見ると、次の情報が表示されます。ドキュメント、アイコンとウィンドウの配置、アクティブなドキュメントの変更、および属性定義の作成。

CreateObject、GetObject、New、または同様の関数を使用して、Dispatch アプリケーション (Visual Basic または C++ Dispatch) から ISldWorks オブジェクトを取得します。スタンドアロン .exe C++ COM アプリケーションは、CoCreateInstance を使用できます。SolidWorks API アドイン ウィザードはすべて、自動的に ISldWorks オブジェクトを作成します。

イベントは、Microsoft .NET Framework のデリゲートで実装されます。このインターフェイスのデリゲートのリストについては、概要トピックを参照してください。」

さて、私はPythonプログラミングに精通していますが、この.net全体は私にとって新しい動物なので、何か単純な間違いをしていると確信していますが、それが何であるかを正確に理解するのに苦労しています. ご協力いただきありがとうございます。

--UPDATE そこで、.net システムがどのように機能するかを調べてみました。したがって、私の目標は、Solidworks アプリケーション オブジェクト (ISldWorks) のインスタンスを作成することであり、すべてのメンバーにアクセスできるはずです。私の調査では、次の 2 つの記事に出くわしました: これらのSolidworks スタンドアロン アプリと鉄の python ドキュメント、およびあなたの非常に役立つ応答、以下のコードが機能するようです。実行すると、「EnvironmentError: System.Runtime.InteropServices.COMException (0x8002802B): Element not found. (Exception from HRESULT: 0x8002802B (TYPE_E_ELEMENTNOTFOUND))」というエラーが表示され、オブジェクトがまだ正しく起動していません。

import System
t = System.Type.GetTypeFromProgID('SldWorks.Application')
swApp = System.Activator.CreateInstance(t)
swApp.Visible = True
4

2 に答える 2

3

少し単純化:

.NET および COM では、通常、クラスのコンストラクターを直接呼び出してインスタンスを作成することはありません。実際、ほとんどのサービスは実際のクラスを公開していません。代わりに、インターフェイス (つまり、実際のクラスのスーパータイプである抽象型) を公開し、必要なパブリック メソッドを定義するだけです。次に、(a) 具象のインスタンスを生成するファクトリ関数そのインターフェイスのサブクラス、または (b) COM が のような「自動ファクトリ」関数で使用できる具象クラスCreateObject

彼らが言うとき、それはドキュメントが意味するものです:

CreateObject、GetObject、New、または同様の関数を使用して、Dispatch アプリケーション (Visual Basic または C++ Dispatch) から ISldWorks オブジェクトを取得します。スタンドアロン .exe C++ COM アプリケーションは、CoCreateInstance を使用できます。

CreateObject具体的な型名を表す文字列である「ProgID」を受け取り、その名前から具体的な型を取得するために必要なすべての魔法を実行し、.NET/COM 相互運用機能を介して渡し、その具体的な型のオブジェクトを作成するようにサービスに要求します。適切なインターフェイスと一致することを確認し、ラップします。VB.NET から SolidWorks を使用する例があれば、おそらく を使用CreateObjectし、IronPython からも同じことができます。

ただし、実際には、ある時点で .NET に関するドキュメントを読んで、そのすべての意味を理解する必要があります。

于 2013-09-20T19:43:58.057 に答える
1

この質問が解決したかどうか疑問に思っていますが、ここに sth を投稿します。COM を使用する他のアプリと同様に、次のように入力するだけです。

swApp = Dispatch("sldworks.Application")

これにより、Solidworks にアクセスできるようになり、API を使用して必要なことを行うことができます。これが必要な人に役立つことを願っています。

于 2017-04-17T08:00:39.430 に答える