はじめに
C# から Open CASCAD Technology (C++) を参照する備忘録です。
改訂履歴
- 2026/06/07 : 初版公開。
本文
1. 環境
- .NET Framework 4.8.1
- Open CASCADE Technology 8.0.0
- Visual Studio Community 2022
2. 構成
大雑把ですが、こんなイメージです。
3. ダウンロード
以下の URL にアクセスします。
occt-combined-with-debug-no-pch.zip をダウンロードします。
4. 手順
4-1. C++/CLI プロジェクトの作成
.NET Framework の CLR クラスライブラリを選択します。見当たらない場合は Visual Studio Installer から追加してください。
プロジェクト名は「OcctLibrary」、ソリューション名は「OcctExample」で作成します。
occt-combined-with-debug-no-pch.zip を全て解凍し、opencascade-8.0.0 フォルダを以下の階層に配置します。
OcctExample
├─ OcctExample.sln
└─ OcctLibrary
├─ OcctLibrary.vcxproj
└─ NativeOcct
├─ .gitignore ... 中身は !* のみ。同階層以下のファイルを Git に含めるために配置。
└─ opencascade-8.0.0
├─ 3rdparty-vc14-64 ... Open CASCAD Technology が利用するサードパーティー製ライブラリ。
└─ opencascade-8.0.0-vc14-64 ... Open CASCAD Technology 本体。
├─ cmake
├─ data
├─ inc
├─ src
├─ win64
├─ custom.bat
├─ custom_vc14_64.bat
├─ env.bat
├─ LICENSE_LGPL_21.txt
└─ OCCT_LGPL_EXCEPTION.txt
補足
このままだと Git の 100MB 制限に引っかかるし、OcctExample 全体の容量(数ギガバイト)も削減したかったので、3rdparty-vc14-64 内にある以下のフォルダは、一旦 7z に圧縮しました。
- doxygen-1.13.2-x64
- draco-1.4.1-vc14-64
- qt5.11.2-vc14-64
- rapidjson-1.10
4-2. C++/CLI ビルド構成の設定
構成マネージャーを開き、OcctLibrary プロジェクトのビルド構成を x64 に設定します。Debug / Release 共に x64 にしてください。
4-3. C++/CLI 構成プロパティの設定
構成プロパティ は Debug と Release で 2 回、設定する必要があります。
OcctLibrary プロジェクトのプロパティから、出力ディレクトリと中間ディレクトリを以下のものに変更します。
$(ProjectDir)bin\$(Platform)\$(Configuration)\
$(ProjectDir)obj\$(Platform)\$(Configuration)\
C/C++ に移動し、追加のインクルードディレクトリに以下のパスを設定します。
$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\inc
プリプロセッサの項目に移動し、定義を以下の値に変更します。
_DEBUG;WNT;OCC_CONVERT_SIGNALS;%(PreprocessorDefinitions)
NDEBUG;WNT;OCC_CONVERT_SIGNALS;%(PreprocessorDefinitions)
言語の項目に移動し、C++ 言語標準で C++17 を選択します。
プリコンパイル済みヘッダーの項目に移動し「使用しない」に変更します。
リンカーに移動し、追加のライブラリディレクトリに以下のパスを設定します。
$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\win64\vc14\libd
$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\win64\vc14\lib
入力の項目に移動し、追加の依存ファイルに以下の値を設定します。
TKBin.lib;TKBinL.lib;TKBinTObj.lib;TKBinXCAF.lib;TKBO.lib;TKBool.lib;TKBRep.lib;TKCAF.lib;TKCDF.lib;TKD3DHost.lib;TKD3DHostTest.lib;TKDCAF.lib;TKDE.lib;TKDECascade.lib;TKDEGLTF.lib;TKDEIGES.lib;TKDEOBJ.lib;TKDEPLY.lib;TKDESTEP.lib;TKDESTL.lib;TKDEVRML.lib;TKDraw.lib;TKernel.lib;TKExpress.lib;TKFeat.lib;TKFillet.lib;TKG2d.lib;TKG3d.lib;TKGeomAlgo.lib;TKGeomBase.lib;TKHelix.lib;TKHLR.lib;TKIVtk.lib;TKIVtkDraw.lib;TKLCAF.lib;TKMath.lib;TKMesh.lib;TKMeshVS.lib;TKOffset.lib;TKOpenGl.lib;TKOpenGles.lib;TKOpenGlesTest.lib;TKOpenGlTest.lib;TKPrim.lib;TKQADraw.lib;TKRWMesh.lib;TKService.lib;TKShHealing.lib;TKStd.lib;TKStdL.lib;TKTObj.lib;TKTObjDRAW.lib;TKTopAlgo.lib;TKTopTest.lib;TKV3d.lib;TKVCAF.lib;TKViewerTest.lib;TKXCAF.lib;TKXDEDRAW.lib;TKXMesh.lib;TKXml.lib;TKXmlL.lib;TKXmlTObj.lib;TKXmlXCAF.lib;TKXSBase.lib;TKXSDRAW.lib;TKXSDRAWDE.lib;TKXSDRAWGLTF.lib;TKXSDRAWIGES.lib;TKXSDRAWOBJ.lib;TKXSDRAWPLY.lib;TKXSDRAWSTEP.lib;TKXSDRAWSTL.lib;TKXSDRAWVRML.lib
ビルド前のイベントに移動し、コマンドラインに以下を設定します。
set "OCCT_SRC=$(ProjectDir)NativeOcct\opencascade-8.0.0\opencascade-8.0.0-vc14-64\win64\vc14\bin"
xcopy /Y /D "%OCCT_SRC%\*.dll" "$(TargetDir)"
set "TP_DIR=$(ProjectDir)NativeOcct\opencascade-8.0.0\3rdparty-vc14-64"
for /d %%d in ("%TP_DIR%\*") do (
if exist "%%d\bin" (
xcopy /Y /D "%%d\bin\*.dll" "$(TargetDir)"
)
if exist "%%d\bin\win64" (
xcopy /Y /D "%%d\bin\win64\*.dll" "$(TargetDir)"
)
)
4-4. C# プロジェクトの作成
次に C# のプロジェクトを作っていきます。今回は安定と信頼(レガシー)の Windows Forms (.NET Framework) を選択します。
プロジェクト名は「OcctApp」で作成します。
OcctApp プロジェクトの参照マネージャーから OcctLibrary を追加します。
構成マネージャーを開き、OcctApp プロジェクトのビルド構成を x64 に設定します。Debug / Release 共に x64 にしてください。
OcctApp プロジェクトのプロパティからビルドイベントに移動し、ビルド後イベントのコマンドラインに以下を設定します。
xcopy /Y /D "$(SolutionDir)OcctLibrary\bin\$(Platform)\$(Configuration)\*.*" "$(TargetDir)"
5. 動作確認
Open CASCAD Technology のバージョン情報を取得する処理を実装して、動作確認してみます。OcctLibrary プロジェクトに OcctVersion クラスを追加します。
#pragma once
using namespace System;
namespace OcctLibrary
{
public ref class OcctVersion
{
public:
static String^ Get();
};
}
#include "pch.h"
#include "OcctVersion.h"
#include <Standard_Version.hxx>
using namespace OcctLibrary;
String^ OcctVersion::Get()
{
return gcnew String(OCC_VERSION_STRING);
}
OcctApp プロジェクトで、以下のように実装します。今回は Form 起動時にバージョン情報をメッセージボックスで表示するようにしています。
using System.Windows.Forms;
using OcctLibrary;
namespace OcctApp
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
// 起動時に OCCT のバージョン情報を表示する。
var occtVersion = OcctVersion.Get();
MessageBox.Show($"OCCT Version: {occtVersion ?? string.Empty}");
}
}
}
無事に表示されました。
おわりに
最初の関門は突破しました。

