Поддержка C++ в CAMAPI
Экспортируемая функция
Native DLL должна экспортировать функцию, которая служит entry point:
extern "C" __declspec(dllexport) void* __stdcall CreateInstanceOfExtension(const wchar_t* PluginID) {
// create instance of your class
IExtensionPtr resultPtr = new ExtensionUtilityExample();
// modify as pointer
resultPtr.AddRef();
void* res = resultPtr.GetInterfacePtr();
return (res);
}
Логика функции может быть сложнее, однако она должна возвращать указатель на объект с увеличенным reference count.
Подключение SDK
SDK поставляется в пакете SprutTechnology.CAMAPI.SDK.tlb. В BuildSystem можно настроить загрузку и распаковку пакета в заданный каталог перед компиляцией. Затем этот каталог необходимо подключить в настройках проекта C++.
В файле build.cs:
- Добавьте в список
ManagerProps:
new RestorerNugetProps
{
Name = "RestorerNuget",
DepsProp = new List<RestorerDepProp>
{
new()
{
PackageId = "SprutTechnology.CAMAPI.SDK.tlb",
Version = "18.2.0",
OutDir = Path.Combine(RootDirectory.Parent, "SDK")
}
}
}
- Задайте соответствия:
settings.ManagerNames.Add("restorer", "Debug", "RestorerNuget");
settings.ManagerNames.Add("restorer", "Release", "RestorerNuget");
- Добавьте восстановление зависимостей перед компиляцией в целевую задачу:
private Target Compile => _ => _
.Executes(() =>
{
_buildSpace.Projects.Restore(Variant);
_buildSpace.Projects.Compile(Variant, true);
});
Таким же способом можно подключить любой другой пакет — аналогично PackageReference в проектах C#.