-
Notifications
You must be signed in to change notification settings - Fork 0
MS_DLLandCOMUser
nishi_74322014 edited this page Aug 21, 2026
·
1 revision
- 戻る(コンポーネント技術)
| 言語 | DLL | COM | .NET DLL |
|---|---|---|---|
| VB6/VBA | DllImport | CreateObject | DLL/COM として作成・利用が可能 |
| VBScript | × | CreateObject | COM として作成・利用が可能 |
| .NET | DllImport | COM 参照(RCW) | .NET 参照で利用可能 |
| PowerShell | DllImport | COM 参照(RCW) | .NET 参照で利用可能 |
| Java | JNI/JNA | JACOB? | DLL/COM として作成・利用が可能 |
| PHP | × | new COM | dotnet_load(実験的実装)。.NET 参照で利用可能 |
※ .NET アセンブリは DLL や COM のインターフェイスを公開できる。
移行メモ(表の崩れ): 移行元の PHP 行の「.NET DLL」列は
dotnet_l.NET参照で利用可能:oad(実験的実装)という
文字列が混線した状態になっていた
(dotnet_load(実験的実装)と.NET参照で利用可能が入り混じっている)。
意味が通るようdotnet_load(実験的実装)。.NET 参照で利用可能と復元した。
補足(表の各セルの補足と、現在の状況): 表が簡潔なので、
実際に使う際の要点を補う。【VB6 / VBA の「DllImport」について】★ VB6 / VBA に DllImport 属性はない。 正しくは【Declare ステートメント】である。 Declare Function MessageBoxA Lib "user32" ( _ ByVal hWnd As Long, ByVal lpText As String, _ ByVal lpCaption As String, ByVal uType As Long) As Long ・64bit Office では【PtrSafe が必須】★ Declare PtrSafe Function ... → Long ではなく【LongPtr】を使う → 32bit Office 向けの既存コードは そのままでは動かない(VBA7 以降) → #If VBA7 Then / #If Win64 Then で分岐する【VBScript の「×」(DLL を直接呼べない)】 正しい。VBScript には Declare がない。 → 回避策は ・COM ラッパーを作って CreateObject する ・【Windows Script Components(.wsc)】 ・PowerShell に処理を委譲する ※ VBScript 自体が 【Windows 11 で非推奨化され、順次削除】される ★ → 詳細は [VBS](MS_VBS) を参照【.NET / PowerShell の COM 参照(RCW)】★ RCW = Runtime Callable Wrapper → COM オブジェクトを .NET から見せるラッパー → 参照追加すると Interop.Xxx.dll が生成される ・【dynamic を使うと Interop DLL 不要】★ dynamic excel = Activator.CreateInstance( Type.GetTypeFromProgID("Excel.Application")); → 遅延バインディング。配布が楽になる ・【解放漏れに注意】 → Marshal.ReleaseComObject / FinalReleaseComObject → Excel が【プロセスに残り続ける】典型原因 ・.NET Core 以降 → 【Windows 上でのみ】COM 相互運用が使える → 「型の埋め込み(Embed Interop Types)」が既定【Java の「JACOB?」(疑問符付き)への回答】★ JACOB(JAva COM Bridge)は実在し、 現在も GitHub で保守されている(LGPL)。 → ただし【JNI ベース】であり、 32/64bit の DLL を環境に合わせて配る必要がある ・他の選択肢 - Jawin(開発終了) - com4j(開発停滞) - 【JNA】★(JNI より宣言的。DLL 呼び出し向け) - 【Project Panama / FFM API】★ → Java 22 で正式化。JNI の後継 → 今から書くならこちら【PHP の COM】 ・COM / DOTNET クラスは【Windows 版 PHP 限定】 ・PHP 8 でも利用可能だが、 【DOTNET クラスは .NET Framework 前提】であり .NET Core 以降には追随していない ★ → 実務では 「PHP から .NET を呼ぶ」のではなく 【HTTP API を挟む】方が確実【表全体への現代的な読み替え】★ この表が扱っているのは 「【同一マシン上でバイナリ境界を越える】」手段である。 現在の主流は ・【プロセスを分けて HTTP / gRPC で話す】 ・【標準入出力でやり取りする】(CLI をラップ) ・【共有メモリ / 名前付きパイプ】(低遅延が要る場合) → バイナリ互換(ABI)に依存しないため 32/64bit、ランタイム版、言語版の 組み合わせ問題から解放される
マネージドコードとアンマネージドコードのブリッジ の
該当節を参照。
Tags: 移行, Windows, プログラミング, .NET開発
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。