トップ回答者
VisualC#からのCOM形式のDLLの呼出し及び安定性について

質問
回答
-
以前 COM形式のDLL(対応環境 VB6SP5!)を VB.NET/C#で使って開発してたことがありました。
数年掛りで開発・運用してたので、運用過程で Visual Studio は 2008 から 2013 へと段階的に遷移し、その間 .NET Framework も3.5 から 4.0 へ移行、当初 Forms で開発してたのが WPF への移行に伴い二つのアーキテクチャ上で稼動させることになり、また上記COMコンポーネントを一時期 IIS でサーバー上で動かしてたこともありました。さらにクライアントOSも、XP・Vista・7・8・8.1 と多岐に渡りました。
以上の開発/運用過程の中で ReleaseComObject の使い方を間違えて System.Runtime.InteropServices.COMException が発生したことはありますが、それ以外では System.Runtime.InteropServices.COMException に遭遇したことはありません。・・・というわけで、私のほうではいままで特に「相性」を感じたことはありません。(別の意味での相性の悪さなら感じますが・・・苦笑)
推測するに、Hongliang さんが仰るとおりその「COM形式のDLL」自体に問題があるか、もしくは実装方法に問題があるのではないかと思います。問題になっている「COM形式のDLL」が何なのかを開示されると、さらに情報が集まるかもしれません。MSDNフォーラムのヘルプは以下ご覧ください http://social.technet.microsoft.com/wiki/contents/articles/7359.forums-help-faq.aspx
- 回答の候補に設定 ひらぽんModerator 2014年10月21日 2:33
- 回答としてマーク 星 睦美 2014年10月24日 7:19
-
正直その「COM形式のDLL」の詳細が不明なため、なんとも言い様がありません。ReleaseComObject に関しては、以下の記事どおり、意識して管理されていれば問題ないかと思います。
COM オブジェクトの参照カウントを解放する
MSDNフォーラムのヘルプは以下ご覧ください http://social.technet.microsoft.com/wiki/contents/articles/7359.forums-help-faq.aspx
- 回答の候補に設定 ひらぽんModerator 2014年10月21日 2:33
- 回答としてマーク 星 睦美 2014年10月24日 7:19
すべての返信
-
以前 COM形式のDLL(対応環境 VB6SP5!)を VB.NET/C#で使って開発してたことがありました。
数年掛りで開発・運用してたので、運用過程で Visual Studio は 2008 から 2013 へと段階的に遷移し、その間 .NET Framework も3.5 から 4.0 へ移行、当初 Forms で開発してたのが WPF への移行に伴い二つのアーキテクチャ上で稼動させることになり、また上記COMコンポーネントを一時期 IIS でサーバー上で動かしてたこともありました。さらにクライアントOSも、XP・Vista・7・8・8.1 と多岐に渡りました。
以上の開発/運用過程の中で ReleaseComObject の使い方を間違えて System.Runtime.InteropServices.COMException が発生したことはありますが、それ以外では System.Runtime.InteropServices.COMException に遭遇したことはありません。・・・というわけで、私のほうではいままで特に「相性」を感じたことはありません。(別の意味での相性の悪さなら感じますが・・・苦笑)
推測するに、Hongliang さんが仰るとおりその「COM形式のDLL」自体に問題があるか、もしくは実装方法に問題があるのではないかと思います。問題になっている「COM形式のDLL」が何なのかを開示されると、さらに情報が集まるかもしれません。MSDNフォーラムのヘルプは以下ご覧ください http://social.technet.microsoft.com/wiki/contents/articles/7359.forums-help-faq.aspx
- 回答の候補に設定 ひらぽんModerator 2014年10月21日 2:33
- 回答としてマーク 星 睦美 2014年10月24日 7:19
-
返信ありがとうございます。
DLL自体は、一般的なものではないので、開示は控えたいと思います。
>以上の開発/運用過程の中で ReleaseComObject の使い方を間違えて
とありますが、下記のように使用しているのですが、問題ないでしょうか?
ソースコードは以下のような感じです(抜粋)
WmSAFPLib.ADspSAFP dataSAFP = new ADspSAFP();
dataSAFP.ConfigFile = IniFile;
System.Threading.Thread.Sleep(500);
dataSAFP.LoadDriver(DriverFile); ⇒ ここでエラーが発生します。
System.Threading.Thread.Sleep(500);System.Runtime.InteropServices.Marshal.ReleaseComObject(dataSAFP);
-
正直その「COM形式のDLL」の詳細が不明なため、なんとも言い様がありません。ReleaseComObject に関しては、以下の記事どおり、意識して管理されていれば問題ないかと思います。
COM オブジェクトの参照カウントを解放する
MSDNフォーラムのヘルプは以下ご覧ください http://social.technet.microsoft.com/wiki/contents/articles/7359.forums-help-faq.aspx
- 回答の候補に設定 ひらぽんModerator 2014年10月21日 2:33
- 回答としてマーク 星 睦美 2014年10月24日 7:19