- - PR -
ActiveX OCXを使用したActiveX DLLをVB.NETから参照
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-09-04 02:02
お世話になります。
ActiveX OCXを使用したVB6で作られたActiveX DLLがあり このDLLをVB.NET2005から参照しています。 このDLLにはフォームがありOCXのコントロールが配置されています。 使用しているOCXはグレープシティのINPUTMANのTEXT.OCXです。 VB.NETからこのDLLを参照し、OCXコントロールに文字を入力すると 全角文字が文字化けてしまいます。 VB6から同じDLLを参照して入力すると正しく入力できます。 このOCXをVB.NETから参照した状態で 文字を入力すると正しく入力できます。 OCXをVB.NETから参照するとAxTEXT.OCXとなり AxHOSTによってラップされているものと思われます。 このようにActiveX Dll経由でActiveX OCXを使用する場合でも AxHOSTによってラップする必要があるのでしょうか? そうなるとActiveX Dll で使用しているOCXをすべて ラップすることになりなります。。。 ActiveX DllをOCXを使用していない別のActiveX Dllで ラップしてからVB.NETで参照することで回避はできました。 ・すべてのOCXをAxHostでラップする ・OCXを使用していない別のActiveX Dllでラップする 以外になにかよい方法はありますでしょうか? | ||||||||
|
投稿日時: 2008-09-05 01:13
その後、調査を続けた結果
は勘違いでVB.NETから直接、OCXを使用したActiveX Dllを参照した時と同じで 文字化けしておりました。 よって、現状では ・すべてのOCXをAxHostでラップする をしか回避方法がない状況です。 OCXをAxHostでラップした場合もActiveX DLLから呼び出されるOCXは 元のOCXになると思うのですが、 VB.NETでAxOCXを参照するとなぜ正常に動作するのかわからず悩んでおります。 VB.NET -> ActiveX Dll -> ActiveX OCX ではなく VB.NET -> ActiveX Dll -> ActiveX OCX -> AxOcx -> ActiveX OCX になるということでしょうか? | ||||||||
|
投稿日時: 2008-09-06 23:58
推測に基づいて発言します。
そういうことです。 Ax〜.dllは.NETで使うためのラッパーに過ぎませんので、.NET以外のところには効果がありません。 恐らく、VB.NETで直接参照して配置したコントロールと、ActiveX DLL経由で配置されているコントロール/フォームでは挙動が異なるのではないでしょうか。 ところで、INPUTMAN 7.0Jのトライアル版とVB6.0の組み合わせでXPにて試しましたが、再現できませんでした。 http://www.grapecity.com/Japan/support/database/P1_268_TrialVersions.htm#content その他で気になる点 ・ActiveX DLLのフォームに貼り付けた通常のテキストボックスでは問題が起きないのでしょうか? →OCX特有の問題か、VB6 ActiveX DLL全体の問題かの切り分け。 ・ActiveX DLLを作成している環境とVB.NET2005の環境は同一マシン上にあるのでしょうか? →開発環境による差の切り分け。 多分違うとは思いますが、昔、vb6jp.dllがなく、msvbvm60.dllだけがある環境で日本語のVB6アプリを実行すると、日本語が文字化けた経験がありました。 | ||||||||
|
投稿日時: 2008-09-07 02:49
Azuleanさま、回答ありがとうございます。
VB標準のTextBoxでは正常に入力できます。 私の環境はINPUTMAN 5.0J(ActiveX)で この現象はAllowAllプロパティを[全角]に設定したときにのみ発生しています。
はい。同一環境です。 VB.NETがOCXを使用しているわけではなく DLLがOCXを使用しているので VB.NETがOCXに対して何らかの不具合を及ぼしていることは考えていませんでしたが、 この考え自体、間違っているというこのなのでしょうか? | ||||||||
|
投稿日時: 2008-09-07 11:46
INPUTMAN 7.0J(ActiveX)のトライアル版のimTextではAllowAllプロパティが見つかりません。動きが近そうなFormatプロパティで試してみましたが、再現を確認できませんでした。 そのバージョンで起きる何らかの問題かもしれません。
そのActiveXコンポーネントが必要なものをロードできないとか、.NETアプリから間接的に呼び出されることで不具合が生じているとか可能性は巡らせることができますが、確たることは言えません。 ただ、VB.NETから間接的に呼ぶことで悪影響を受けるのはそのOCXの作りが悪い可能性が高いとは思うのですが、実際の現象を解析したわけではないので断定はできません。 GrapeCityのサポートに問い合わせてはどうでしょうか。 | ||||||||
|
投稿日時: 2008-09-10 00:06
INPUTMAN7.0Jで同じようなActiveXDLLを作成して試してみましたが
やはり、現象は発生しませんでした。 そもそもINPUTMAN5.0JはWindowsXPに対応していないため VB6からActiveXDLLを参照した場合であっても正常に動作する保障が ないことがわかしました。 お手数をおかけいたしました。ありがとうございました。 |
1