使用c ++创建独立的Solidworks应用程序

时间:2013-02-28 21:18:36

标签: c++ api solidworks

我正在尝试创建一个独立的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

但是这些头文件无处可寻......请帮助。

2 个答案:

答案 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所说,你还需要包含相关的标题。