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でやりたい思っているのですが。。。 ぼちぼち、試してみます。。。
|
|
|
|
|
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さんはどんな環境で動作なさったんですか? もしよろしければ教えてください。
|
|
|
|
|
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を使えば比較的簡単に実装できると思います。
|
|
|
|