api — Создание отдельного приложения Solidworks в Stack Overflow

Я пытаюсь создать отдельное приложение Solidworks (я хочу, чтобы моя программа на С ++ создавала новую геометрию в Solidworks, работая в фоновом режиме). Я использую MSVC ++ Express 2010.

Я попытался реализовать следующий код предложил здесь

//Import the SolidWorks type library
#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

//Import the SolidWorks constant type library
#import "swconst.tlb"  raw_interfaces_only, raw_native_types, no_namespace, named_guids

int _tmain(int argc, _TCHAR* argv[])
{
//Initialize COM
CoInitialize(NULL);

//Use ATL smart pointers
CComPtr<ISldWorks> swApp;

//Create an instance of SolidWorks
HRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);

//My Code here

//Shut down SolidWorks
swApp->ExitApp();

// Release COM reference
swApp = NULL;

//Uninitialize COM
CoUninitialize();

return 0;
}

Он не жалуется на операторы импорта для библиотек, но не собирается из-за следующих ошибок:

1>main.cpp(19): error C2065: 'CComPtr' : undeclared identifier
1>main.cpp(19): error C2275: 'ISldWorks' : illegal use of this type as an expression
1>          c:\users\nolan\documents\c++\solidworks_test\solidworks_test\debug\sldworks.tlh(7515) : see declaration of 'ISldWorks'
1>main.cpp(19): error C2065: 'swApp' : undeclared identifier
1>main.cpp(22): error C2065: 'swApp' : undeclared identifier
1>main.cpp(22): error C2228: left of '.CoCreateInstance' must have class/struct/union
1>          type is ''unknown-type''
1>main.cpp(26): error C2065: 'swApp' : undeclared identifier
1>main.cpp(26): error C2227: left of '->ExitApp' must point to class/struct/union/generic type
1>          type is ''unknown-type''
1>main.cpp(29): error C2065: 'swApp' : undeclared identifier

Очевидно, я что-то упускаю, но я не могу понять, что это такое. Я чувствую, что это как-то связано с ATL, но я не уверен … Пожалуйста, помогите.

Спасибо

РЕДАКТИРОВАТЬ:

Хорошо, я скачал комплект разработки для Windows 8.0, и все файлы там. Я статически связывался с ATL на страницах свойств, я также пытался связать библиотечные файлы в каталоге: C:\Program Files\Windows Kits\8.0\Lib\Atl

Но эти заголовочные файлы нигде не найти … пожалуйста, помогите.

2

Решение

Итак, я нашел решение. Это может быть не самым элегантным, но это работает.

К сожалению, библиотеки объектных файлов ATL в WDK не помогают, поскольку файлы заголовков нигде не найдены.

Итак, после более глубокого изучения я обнаружил, что полная версия Visual Studio (не Express) позволяет использовать библиотеку ATL. Как оказалось, мне повезло, потому что Microsoft раздает студентам полные версии Visual Studio (см. DreamSpark веб-страница), и я, оказывается, студент. 🙂

Таким образом, после загрузки, установки и установки любых пакетов обновления (у меня был только один) у меня был еще один шаг, чтобы заставить его работать:

Я перешел на страницу свойств -> C / C ++ -> General
Я включил каталог, в котором можно найти файлы .tlb (в моем случае C: \ Program Files \ SolidWorks Corp \ SolidWorks)

Затем я запустил следующий код:

//main.cpp

#include <afxwin.h>
#include <iostream>

#import "sldworks.tlb"
void main()
{
//Initialize COM
CoInitialize(NULL);

//Use ATL smart pointers
CComPtr<SldWorks::ISldWorks> swApp;

//Create an instance of SolidWorks
HRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);

//Make the instance visible to the user
swApp->put_Visible(VARIANT_TRUE);
std::cin.get();

//Shut down SolidWorks
swApp->ExitApp();

// Release COM reference
swApp = NULL;

//Uninitialize COM
CoUninitialize();
}

И это было это. Solidworks открывается при запуске программы (дополнительная put_Visible Функция позволяет пользователю видеть окно), и закрывается без жалоб, когда пользователь нажимает войти в окно консоли.

2

Другие решения

Похоже, что компилятору не удается найти определения для определенных вещей, в частности CComPtr который является частью ATL (как вы упомянули). Я не работал с ATL, но сработает ли он, чтобы перейти к свойствам вашего проекта в Visual Studio и убедиться, что для параметра «Использование ATL» установлено значение «Статический» или «Динамический» в зависимости от ситуации?

Как упоминал Джерри, вам также необходимо включить соответствующие заголовки.

0

По вопросам рекламы [email protected]