仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/05/02 - 15:35:02
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: COM利用法 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: COM利用法  (閲覧数 7400 回)
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
COM利用法
« 投稿日: 2004/06/18 - 20:49:49 »
引用して返信

お世話になっております
Hiroponです。

早速ですが質問させていただきます。いままで、VBベースにて
マクロの製作を試みてきたのですが、ここでC言語のほうに
移行していこうかと考えております。

しかし、どのようにしてCOMを利用していったらいいのかが
わかりません。開発環境はVC++6.0 Win32ConsoleApplication
で行おうと思っています。ヘルプをみるとそれらしいところに

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

int _tmain(int argc, _TCHAR* argv[]) 

{



CoInitialize(NULL);      //Initialize COM

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

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

swApp->ExitApp();

swApp = NULL;

CoUninitialize();

return 0;

}

があったので丸写しでコンパイルしてみたのですがうまくいきません
一応solidworks.tlibはインクルードできましたが CComPtrが
定義されてないらしくヘッダーか何かが足りないようです。
どなたか、お詳しい方 御指南いただけると非常に有難いです。
よろしくお願いいたします。

議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:COM利用法
« 返信 #1 投稿日: 2004/06/23 - 11:21:12 »
引用して返信

Hiroponさん こんにちわ。

私自身はVC++をまったく知らないのが、ヘルプなどを見て思ったことだけ書きます。
多分、Hiroponさんは、新規作成→プロジェクト→Win32ConsoleApplicationでプロジェクトを開始していると思うのですが、新規作成→プロジェクト→ATL COM AppWizard でプロジェクトを開始すればいいのかな?とおもいました。
(Win32ConsoleApplicationでもいろいろと設定やコードを書くと出来るのかも知れませんが、その辺はまったく素人ですので...。)

議長に報告する   記録済み
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #2 投稿日: 2004/06/24 - 12:35:01 »
引用して返信

Makoronさん
返信ありがとう御座います。どなたからも、返信がなく寂しかった
のですがやっと・・・
ATL COM AppWizard で開始すればいけるんじゃないかと
私もうすうす感じてはいたのですが、私も
Win32ConsoleApplicationでしかCやC++を組んだことが
なくATL COM AppWizard はど素人以下なので
なんとかWin32ConsoleApplicationでやりたい思っているのですが。。。
ぼちぼち、試してみます。。。
議長に報告する   記録済み
10000years
新人さん
*

オフライン

投稿: 9



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #3 投稿日: 2004/07/07 - 10:57:37 »
引用して返信

hiroponさん こんにちわ
参考になるかわかりませんが、ATLではじめるならSWUSのページに「SolidWorks API SDK 2004」というのがあります。
http://www.solidworks.com/pages/services/APIDownloads.html?pid=121
これをダウンロードしてインストールすると、ウィザードを使えるようになってプログラムの雛形を自動で作ることができるようです。自分も試しましたが、ツールバー、メニュー、イベント、さらにはプロパティマネージャーまで作ってくれちゃいます  自分もそうなんですが、あとはATLの知識だけかな?
議長に報告する   記録済み
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #4 投稿日: 2004/07/08 - 12:43:40 »
引用して返信

10000yearsさんこんにちは
はじめましてーー今後ともよろしくお願いします。。。

御指南ありがとうございます。
早速ダウンロードしてみました。私の知識不足でいまいち
使い方がわからないのですが、インストールするとExampleのみ
がAPIフォルダの中にダウンロードされるのですか?

Exapleフォルダの
General C++ Examplesフォルダ内の
cpp_function_demos.slnファイルについて弊社のソフト部門の方に
聞いてみると

これは VisualStudio6.0では動かんのちゃう?と言われてしまいました。

失礼ですが、10000yearsさんはどんな環境で動作なさったんですか?
もしよろしければ教えてください。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:COM利用法
« 返信 #5 投稿日: 2004/07/08 - 13:15:23 »
引用して返信

hiroponさん、こんにちは。
(横から失礼します。)
'
引用元: hiropon 投稿日 '.timeformat('1089258220').'   
'cpp_function_demos.slnファイルについて
これは VisualStudio6.0では動かんのちゃう?

インターネットで検索かけてこんなの見つけました。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxgrfFileTypesFileExtensionsInVisualStudioNET.asp

これは、Visual Studio .NET 用みたいですね。
議長に報告する   記録済み
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #6 投稿日: 2004/07/08 - 16:22:03 »
引用して返信

Makoronさん
どうもお世話になっております!!
そうですねーcpp_function_demos.slnは .NET用のファイルみたい
です。弊社のソフトの人もそういえば.NETがどうのこうのと言ってましたわ。
あまり、.NETについてもよく知らないので聞き流してました。
.NETって最近でたんですよねー?

10000yearsさんも.NET環境で使用されたんですかー?
もしよければ、教えてください。

やはり.NETインストールしないとCOMは使えないんでしょうかねー?
それとも他にC言語とつなぐ方法があるのか?
そう考えるとVBって便利ですね!!
議長に報告する   記録済み
10000years
新人さん
*

オフライン

投稿: 9



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #7 投稿日: 2004/07/08 - 19:49:20 »
引用して返信

hiroponさん
こんにちは、

いきなりですが、ATLというのは結構とっつきにくい感が少しあります。
MFCに比べてサクサク動くという利点があるようですが、その分面倒な一面もあるようです。

ちなみに私の環境はVS6.0で作成しました。
とりあえず私がやった方法を書きますね。

1.VSを起動して、新規作成でATL COM AppWizardを適当な名前で作成します。
2.クラスビューのツリーの一番上の〜クラスと言う名前でRMBクリックでATLオブジェクトの新規作成を選びます。
3.カテゴリでSolidWorks、オブジェクトでSwAddInを選んで次へ
4.ショートネームに名前を入れます(MyFirstATLとか)
5.タブをSolidWorksAddInに変えて、PropertyManagerのチェックを入れて他は外します(とりあえずです)。
6.OKをすると雛形が出来上がってきます。
ただし、ここからまた設定をしなければなりません。
7.メニューからプロジェクト/設定のC/C++タブで、カテゴリにC++言語を選んで例外処理〜にチェックを入れます。
8.次にカテゴリにプリプロセッサを選んでインクルードファイルのパスに次のように入れます。
C:\\Program Files\\SolidWorks\\samples\\appcomm;C:\\Program Files\\SolidWorks
基本はSWのインストールパスなので、ご自分の環境に合わせてください。
以上でVCの設定は完了です。F7コンパイル−>F5実行でSldWorks.exeを指定すると、ツール/アドインにつくったものが出来上がっているはずです。
5で他のオプションとか選んでいるとエラーになったりするのでご注意ください。
あとはブレークを張って、張って中を調べれば・・・ってそう簡単にはいかないと思いますが、やる価値はありそうです。
自分も少しずつ勉強していきますので、なにか情報があったら教えてください。
議長に報告する   記録済み
10000years
新人さん
*

オフライン

投稿: 9



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #8 投稿日: 2004/07/08 - 19:53:22 »
引用して返信

あ〜ごめんなさい
パスの書き込みのところがバックスラッシュがダブってます。
通常のパス指定と同じバックスラッシュひとつです。

書き込みプレビューで見たらこうしないときちんと表示されなかったので・・・

不慣れでもうしわけないです。
議長に報告する   記録済み
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #9 投稿日: 2004/07/09 - 12:41:57 »
引用して返信

10000yearsさん
お世話になっております。

>ちなみに私の環境はVS6.0で作成しました。
そうだったんですかーー
私の知識不足でした。。。VS6.0でも動くんですねー

動作手順まで御指南いただいて本当にありがとうございますーー。
現状少し、業務が忙しいのであまりATLに時間がさけませんが
ぼちぼちやっていきます。。。なにかわかったら掲示していきますね!!
お互い勉強になればいいですねーーーー!!

ではではまた。。。
議長に報告する   記録済み
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #10 投稿日: 2004/07/12 - 12:47:01 »
引用して返信

hiroponです。
時間がないとわかっていながらついつい
気になって解析してしまいます
10000yearsさんに御指南いただいた結果
動作するようになりました。ありがとうございました。
またこの前の返信で

>5.タブをSolidWorksAddInに変えて、PropertyManager
>のチェックを入れて他は外します(とりあえずです)。
>5で他のオプションとか選んでいるとエラーになったりするの
>でご注意ください。

とおっしゃっていたいましたが、
全部選択しても
通る方法を見つけました。(ご存知かも知れませんが・・・)
例えばプロジェクト名をTest1としたら
Test1.cppのなかに以下の文があります

OBJECT_ENTRY(CLSID_test, /* Replace this line with the string in the braces {OBJECT_ENTRY_NON_CREATEABLE(CSwPart)}*/)

この部分がエラーになっているわけですがここの
第二引数を
CSwPartのみに書き換えると通ります。
同様にあと3行ほどあるものも全て第二引数を
CSwAssembly
CSwDrawing
CDocView
と書き換えることでエラーでなくなります。
このやり方で最善なのかどうかよくわかりませんが
とりあえず、掲示します
議長に報告する   記録済み
10000years
新人さん
*

オフライン

投稿: 9



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #11 投稿日: 2004/07/12 - 14:06:15 »
引用して返信

hiroponさん こんにちは、

アドバイスの件、ありがとうございます
私も実は、同じような手順をおこなって解決していました。
hiroponさんも同じ結果にたどり着いたということは、最善とは
わかりませんが間違ってはいなかったのだと自身を深めているところです。
また何かあったら書き込みします。
それでは、
議長に報告する   記録済み
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #12 投稿日: 2006/02/28 - 18:55:28 »
引用して返信

こんにちはhiroponです。
結構前に質問させていただいたんですが、まだしつこくCOMでプログラムを組んでいけないか
を模索しているところです。 
エラーがでてしまう箇所があります。
環境は VS6.0 ATLCOM AppWizardで EXEを選択。

#import "sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids   

を出来上がったソースの 設定した名前.cpp の上の方で実行

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

HRESULT hres = swApp.CoCreateInstance(__uuidof(SldWorks), NULL, CLSCTX_LOCAL_SERVER);   
swApp->get_IActiveDoc2(&ModelDoc);
swApp = NULL;
CoUninitialize();


extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)

の中で実行するんですがどうも、swApp->get_IActiveDoc2(&ModelDoc); が
エラーをおこします。
-------------------------------------------
Debug Assertion Failed!!
File: cprogramfiles......atlbase.h
Line 474

Expression p!=0
-------------------------------------------
というようなエラーがMessegeBoxで出ます。

10000yearsさんのおっしゃったような DLLの形式(Addin形式?)でも同様のことが
おこりました。どうもswAppのメンバ関数を実行しようとするとエラーがでるようです。
長くなってすいません。。。
どなたかお詳しい方、御指南の程よろしくおねがいします。
議長に報告する   記録済み
Makoron
カタマリの王様!?
*****

オフライン

投稿: 1277



SW2011SP5.0

プロファイルを見る
Re:COM利用法
« 返信 #13 投稿日: 2006/03/01 - 19:29:14 »
引用して返信

>どなたかお詳しい方、御指南の程よろしくおねがいします。
すみません、詳しくない(VCは使えない)Makoronですが、ほんの少しだけ。

Googleで「atlbase.h Line 474」を検索してみたら、いくつか出てきたのですが、「英語力の無さ」と「VCわからない」で回答すらできません。

hiroponさん検索してみてはどうでしょう。

なにも役に立たないMakoronでした。
議長に報告する   記録済み
hiropon
Sr. メンバー
****

オフライン

投稿: 84



I'm a llama!

プロファイルを見る
Re:COM利用法
« 返信 #14 投稿日: 2006/03/01 - 19:52:27 »
引用して返信

Makoronさん
ありがとうございます。 (うれし泣き)
なんとかしてやろう と思ってくれておられる感じがひしひしと
伝わり感激です。

今日は一日これに費やしています
しかし、進展の方が・・・
いろいろSampleとか試してはいるんですがどうも
自分のやりたいように、SolidWorksとつながってくれません
はぁー(ためいき)
おそらくオブジェクトを取得する手続きが悪いんだと思います。
VBにくらべて 手続きが複雑すぎます(と思っているけど実は
SDKを使うと簡単なのかな?)

>Googleで「atlbase.h Line 474」を検索してみたら、
>hiroponさん検索してみてはどうでしょう。

了解です。ありがとうございます。

PS
Makoronさんの情報は役立つもの満載です。 
これからも何卒よろしくお願いします。
議長に報告する   記録済み
PAN
新人さん
*

オフライン

投稿: 7



I'm a llama!

プロファイルを見る メールアドレス
Re:COM利用法
« 返信 #15 投稿日: 2006/09/08 - 16:01:38 »
引用して返信

こんにちは、今更かもしれませんが・・・

SW2005SDKを使えば比較的簡単に実装できると思います。
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: COM利用法 前のトピック 次のトピック
ジャンプします: