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

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









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

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 64bit OS で、SldWorks::LoadAddIn が失敗する 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: 64bit OS で、SldWorks::LoadAddIn が失敗する  (閲覧数 4251 回)
jc-a
Jr. メンバー
**

オフライン

投稿: 16



I'm a llama!

プロファイルを見る
64bit OS で、SldWorks::LoadAddIn が失敗する
« 投稿日: 2008/03/03 - 16:30:07 »
引用して返信

CreateObject("SldWorks.Application") にてSolidWorksをプログラム内部から起動する際、32bit OS 上では SldWorks::LoadAddIn が正常に終了(戻り値 '0' )し、C++ で作成したアドインメニューおよび、PDMWorks Enterprise アドインメニューがロードされますが、64bit OS 上だと、SldWorks::LoadAddIn の戻り値が '3' で、自作アドインメニューおよび、PDMWorks Enterprise アドインメニューがロードされません。

VB.NET 2003 側
Dim swApp As SldWorks.SldWorks
Const sAddinName As String

swApp = CreateObject("SldWorks.Application")

'自作アドイン
sAddinName = "C:\samples\VB_COM\Sample.dll"
nStatus = swApp.LoadAddIn(sAddinName)

'PDMWorks Enterprise アドイン
sAddinName = "D:\Program Files\PDMWorks Enterprise\PDMSW.dll"


開発環境 VB.NET 2003
動作環境 SolidWorks 2007 SP4.0 x64 Edition
            PDMWorks Enterprise 2008 SP2.0
64bit 版の自作アドインメニューは C++ で作成しており、64bitモードでコンパイルしています。

64bit OS 上で、VB.NET2003 のソース上から、SolidWorks の DLL を参照しなおしてリビルドをかけてみましたが、結果は同じでした。

どなたか、ご教授をお願いいたします。
議長に報告する   記録済み
hisa
カタマリの王様!?
*****

オフライン

投稿: 507



PANDA-Z!!

プロファイルを見る WWW
Re:64bit OS で、SldWorks::LoadAddIn が失敗する
« 返信 #1 投稿日: 2008/03/03 - 19:01:53 »
引用して返信

64bitどころか、Addinのこともそんなに詳しくありませんが…

LoadAddinの返り値は、swLoadAddinError_eで定義されており
3は"swFileNotFound"でした。
(SW2008のAPIヘルプで確認)
32bitで動いている状況から、パスをミスってるわけでは無いような
気もしますが…

あとは、普通にSWを起動してPDMWorksがロードできるか確認
してみたらどうですかね?
それで動かなければ、別の要因があるかもです。

具体的な解決策ではありませんが、ご参考まで
議長に報告する   記録済み
jc-a
Jr. メンバー
**

オフライン

投稿: 16



I'm a llama!

プロファイルを見る
Re:64bit OS で、SldWorks::LoadAddIn が失敗する
« 返信 #2 投稿日: 2008/03/03 - 19:41:04 »
引用して返信

>hisaさん

早速の返信ありがとうございます。

SWを通常起動すると、PDMWorks アドインは正常にロードされ、アドインメニューに追加されています。

ロードされないのは、CreateObject した際に限定されている感じです。

>LoadAddinの返り値は、swLoadAddinError_eで定義されており
3は"swFileNotFound"でした。

戻り値の定数は「ファイルが見つからない・・・」
う〜む謎ですね
その辺りも疑ってデバッグ実行して変数のファイルパスと物理ファイルを確認したのですが・・・

議長に報告する   記録済み
jc-a
Jr. メンバー
**

オフライン

投稿: 16



I'm a llama!

プロファイルを見る
Re:64bit OS で、SldWorks::LoadAddIn が失敗する
« 返信 #3 投稿日: 2008/03/04 - 20:20:12 »
引用して返信

自己レスです。
どうやら、SolidWorks API が原因ではなかったようです。


PDMWorks Enterprise 2008 をインストールすると、アドインメニューとなる DLL が、以下のように配置される。


32bit OS
C:\Program Files\PDMWorks Enterprise\PDMSW.dll

64bit OS
C:\Program Files\PDMWorks Enterprise\PDMSW.dll          ←64bit DLL
C:\Program Files (x86)\PDMWorks Enterprise\PDMSW.dll    ←32bit DLL
※64bit版は2箇所に入ります。


64bit OS 上で実際に使用するアドインメニューがレジストリに登録されるのは、
C:\Program Files\PDMWorks Enterprise\PDMSW.dll ←64bit DLL



PDMWorks Enterprise のアドインメニュー DLL が、格納されているフォルダパスは、以下のレジストリに格納されている。

HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks\Applications\PDMWorks Enterprise\SharedLocation

格納値 C:\Program Files\PDMWorks Enterprise


しかし、Win32 API を使用し、PDMWorks Enterprise の DLL 格納パスを取得すると以下のように値が返ってくる。

32bit OS の場合
C:\Program Files\PDMWorks Enterprise

64bit OS の場合
C:\Program Files (x86)\PDMWorks Enterprise
※レジストリに実際に書かれているのは「C:\Program Files\PDMWorks Enterprise」で64bit のパスであるにもかかわらず、32bit の DLL フォルダのパスが取得されてしまう。

これは、WinAPI の仕様で、自作アプリケーション のプロセスが、32bit で動作しているため、実際にレジストリに書かれている 64bit DLL のパスを返さずに、32bit のパスにリダイレクションしてしまう。

64bit OS 上で動作させるSolidWorks は、64bit で、アドインされる PDMWorks Enterprise アドインメニューの DLL も 64bit の DLL である。

といった具合です・・・orz
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: 64bit OS で、SldWorks::LoadAddIn が失敗する 前のトピック 次のトピック
ジャンプします: