Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

.NET :Interaction.GetObject で起動中の AutoCAD COM オブジェクトを取得できない場合の対処方法

Дата публикации: 04-09-2026 03:06:09


質問
.NET 8移行 の外部アプリケーションから、以下のように Microsoft.VisualBasic.Interaction.GetObject を使用して起動中の AutoCAD の COM オブジェクトを取得しようとすると、Nothing が返されます。
Dim progId As String = "AutoCAD.Application.25.0"
Dim acadApp As AcadApplication
acadApp = CType(Interaction.GetObject(, progId), AcadApplication)
 
一方、Interaction.CreateObject を使用して AutoCAD を新規に起動することはできます。
 
.NET 以降の外部アプリケーションから、起動中の AutoCAD の COM オブジェクトを取得する方法はありますか?
 
回答
.NET では、Microsoft.VisualBasic.Interaction.GetObject を使用して、従来の .NET Framework と同様に起動中の COM オブジェクトを取得できない場合があります。
この場合、Windows API の GetActiveObject を P/Invoke で呼び出し、Running Object Table(ROT)に登録されている AutoCAD の COM オブジェクトを取得する方法を使用できます。
以下は VB.NET の例です。
Imports System.Runtime.InteropServices
Imports Autodesk.AutoCAD.Interop
<DllImport("ole32.dll",
CharSet:=CharSet.Unicode,
PreserveSig:=True)>
Private Shared Function CLSIDFromProgIDEx(
<MarshalAs(UnmanagedType.LPWStr)> progId As String,
ByRef clsid As Guid) As Integer
End Function
<DllImport("oleaut32.dll",
EntryPoint:="GetActiveObject",
PreserveSig:=True)>
Private Shared Function NativeGetActiveObject(
ByRef clsid As Guid,
reserved As IntPtr,
<MarshalAs(UnmanagedType.IUnknown)> ByRef obj As Object) As Integer
End Function
Private Shared Function GetActiveObject(progId As String) As Object
Dim clsid As Guid
Dim hr As Integer = CLSIDFromProgIDEx(progId, clsid)
If hr < 0 Then
Marshal.ThrowExceptionForHR(hr)
End If
Dim obj As Object = Nothing
hr = NativeGetActiveObject(clsid, IntPtr.Zero, obj)
If hr < 0 Then
Marshal.ThrowExceptionForHR(hr)
End If
Return obj
End Function
 
起動中の AutoCAD を取得する場合は、次のように呼び出します。
Dim acadApp As AcadApplication
acadApp = CType(
GetActiveObject("AutoCAD.Application.25.0"),
AcadApplication)
上記の AutoCAD.Application.25.0 は AutoCAD 2025 の ProgID です。使用する AutoCAD のバージョンに応じて ProgID を変更してください。
 
なお、AutoCAD 2025 から .NET 8 が採用されているため、AutoCAD 2025 以降の外部 .NET アプリケーションで、この違いが表面化するケースがあります。
Autodesk Developer Blog でも、.NET 8 から起動中の AutoCAD COM オブジェクトを取得する方法として、Windows API の GetActiveObject を使用する方法が紹介されています。
 
参考
 
Autodesk Developer Blog: AutoCAD 2025 : Marshal.GetActiveObject .NET Core
Microsoft: Interaction.GetObject Method
 

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1AutoCAD .NET API :最後に追加されたエンティティの取得013.0323-08-2026
2Visual Studioで「InventorViewCtrl.ocxの自己登録に失敗しました」エラーが発生して、Inventor ViewコントロールをWindowsフォームへ追加することが出来ない010.9417-08-2026
3Managed .Net API でレイアウト空間のビューポート表示範囲のオブジェクトを取得する方法015.2417-08-2026
4InventorのPack And Go を、VBAから実行する場合の参照設定013.1217-08-2026
5Revit API Tips: 壁プロファイルの取得方法05.817-08-2026
6InventorのFileAccessEvents.OnFileResolutionイベントでFullFileNameに指定したファイルが読み込まれない014.4917-08-2026
7InventorのAPIで、IDWファイルをバージョンを指定してDXFに変換する方法011.6317-08-2026
8Revit API Tips: ソリッドやメッシュのジオメトリをプロジェクト上に作図する方法07.5917-08-2026
9Revit API Tips: アドインでバッチ処理を実装する方法04.5117-08-2026
10Revit API Tips: 複数のファミリを組み合わせて(ネストして)新しいファミリを作成する方法06.1717-08-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 10.2. Источник: forums.autodesk.com.