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

它没有抱怨库的导入语句,但是由于以下错误而无法构建:
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
但是找不到这些头文件...请帮助。

最佳答案

好的,所以我找到了解决方案。它可能不是最优雅的,但可以。

不幸的是,由于找不到头文件,因此WDK中的ATL对象文件库无济于事。

因此,在深入研究之后,我发现完整版本的Visual Studio(而非Express)允许您使用ATL库。事实证明我很幸运,因为Microsoft向学生提供了完整版的Visual Studio(请参阅Dreamspark页面),而我恰好是一名学生。 :)

因此,在下载,安装和安装了任何Service Pack(我只有一个)之后,我只需要采取进一步的步骤即可使其工作:

我导航到属性页-> C / C++->常规
我包括了可以找到.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时关闭而不会抱怨。

09-06 20:00