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!!
|
|
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
|
|
|
|