3

スタンドアロンの Solidworks アプリケーションを作成しようとしています (バックグラウンドで実行されている Solidworks で新しいジオメトリを作成する C++ プログラムが必要です)。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;
}

ライブラリの 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 と何か関係があるように感じますが、よくわかりません... 助けてください。

ありがとう

編集:

OK、Windows 開発キット 8.0 をダウンロードしました。すべてのファイルがあります。プロパティ ページで ATL に静的にリンクしました。また、ディレクトリ内のライブラリ ファイルをリンクしようとしました。C:\Program Files\Windows Kits\8.0\Lib\Atl

しかし、それらのヘッダー ファイルはどこにもありません...助けてください。

4

2 に答える 2

3

わかりましたので、解決策を見つけました。最もエレガントではないかもしれませんが、機能します。

残念ながら、ヘッダー ファイルが見つからないため、WDK の ATL オブジェクト ファイル ライブラリは役に立ちません。

そのため、さらに掘り下げた後、Visual Studio のフル バージョン (Express ではない) で ATL ライブラリを使用できることがわかりました。Microsoft が Visual Studio のフル バージョンを学生に提供していて ( DreamsparkのWeb ページを参照)、たまたま学生だったので、私は幸運でした。:)

そのため、サービス パックをダウンロード、インストール、およびインストールした後 (私は 1 つだけ持っていました)、それを機能させるために必要な手順がもう 1 つありました。

Property Pages -> 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機能により、ユーザーはウィンドウを見ることができます)、ユーザーがコンソール ウィンドウで Enter キーを押すと、問題なく閉じます。

于 2013-04-05T15:43:22.560 に答える
0

コンパイラが特定のもの、特にCComPtrATLの一部である定義を見つけるのに問題があるようです(あなたが言及したように)。ATL を使用したことはありませんが、Visual Studio のプロジェクト プロパティに移動し、「ATL の使用」が必要に応じて静的または動的に設定されていることを確認してください。

Jerry が述べたように、関連するヘッダーも含める必要があります。

于 2013-02-28T21:33:03.743 に答える