我正在尝试创建一个独立的Solidworks应用程序(我希望我的c ++程序在Solidworks中创建新的几何体,在后台运行)。我正在使用msvc ++ express 2010。
我试图实现以下代码suggested here
//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;
}
它没有抱怨库的import语句,但由于以下错误而无法构建:
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
但是这些头文件无处可寻......请帮助。
答案 0 :(得分:2)
好的,所以我找到了解决方案。它可能不是最优雅的,但它确实有效。
不幸的是,WDK中的ATL对象文件库没有帮助,因为无法找到头文件。
因此,在进行了更多挖掘之后,我发现Visual Studio(非Express)的完整版本允许您使用ATL库。事实证明我很幸运,因为微软向学生提供了完整版的视觉工作室(参见Dreamspark网页),而我恰巧是一名学生。 :)
因此,在下载,安装和安装任何服务包(我只有一个)后,我需要再采取一个步骤才能使其工作:
导航到Property Pages - &gt; C / C ++ - &gt;一般 我包含了可以找到.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
功能允许用户查看窗口),并在用户按下控制台窗口中的Enter键时关闭而不会抱怨。
答案 1 :(得分:0)
看起来编译器在查找某些内容的定义时遇到了问题,特别是作为ATL一部分的CComPtr
(正如您所提到的)。我没有使用ATL,但是它可以在Visual Studio中转到你的项目属性并确保你将“使用ATL”设置为静态或动态吗?
正如Jerry所说,你还需要包含相关的标题。