VB6で動作するocxを使用するには?

解決


Quest  2013-04-22 14:59:38  No: 44382

Delphi XE3 WinXP SP3の環境で、VB6で動作するocxを使おうと考えています。
コンポーネントのインポート、ActiveXコントロールの取り込みから取り込む事はできたのですが
いざ実行して、プロパティなどにアクセスすると「ライブラリは登録されていません」と表示されます。
該当のocxはregsvr32.exeで登録していますし、レジストリを見ても登録されているようです。
そもそも、同じPCでVB6のEXEは動いているので登録されているはずだと思うのですが、原因が分かりません。
ただ1つ気になるのは、VBではフォームに貼り付けて使用しているのではなく
Private WithEvents jm As JMXCtrl
Set jm = New JMXCtrl
のようにして、動的に生成しているので、この辺にヒントがありそうなのですが、よく分かりません。
試しに、フォームに載せずに動的に生成したり
obj; variant;
obj := CreateOleObject('ocxのクラス識別子');
として
obj.<プロパティ> := ・・・
ともやってみたのですが、これもCreateOleObjectは成功しますが
プロパティへアクセスすると「ライブラリは登録されていません」と表示されました。
このocxを使用するにはどうすればいいでしょうか。
何かヒントをお願いできますでしょうか。


Quest  2013-04-22 19:19:48  No: 44383

自己レスです。

その後、一部のプロパティやメソッドでは動作する事が判明し
その差を調べるべく、コントロールを取り込んだ時にできたソースを見たところ
動作するものをラップしている関数の中身は
DefaultInterface.<元のプロパティなどの名前>
となっていました。
そこで、動作しないプロパティなども全て同じ呼び出し方をしたら
エラーメッセージも無くすんなり動作しました。
どうも、このOCXは非ビジュアルのコンポーネントで、それを取り込む時に
強制的にフォームに載せられるようなビジュアルコンポのようにラッパーされたので
うまく扱えないような気がしてきました。
インターフェースの定義を使って、自前で生成すればうまく行きそうですが
勉強不足でインターフェース定義から、どうやってそのコントロールの
インスタンスを生成するのか、またどうやってプロパティなどを呼び出すのか分かりません。
インターフェース周りで参考になる情報がありましたらお願いいたします。


Mr.XRAY  URL  2013-04-25 04:35:49  No: 44384

Quest さん,こんにちは,Mr.XRAY です.

残念ながら,これこれいった確実な知識はないのですが,
DefaultInterface.<元のプロパティなどの名前>

の方式で動作,アクセスできるのであれば,
obj := CreateOleObject('ocxのクラス識別子');

のあたりがポイントなのではないかと思っています.
例えば,同じエクセルのオブジェクトの生成でも,

 ExcelObj := CreateOleObject('Excel.Application');
 ExcelApp := CreateComObject(CLASS_ExcelApplication) as ExcelApplication;
 
などがあります.後,CoClass の CoXXXXX 等でも生成できます.
これは,XXXX_TLB_pas 内のインターフェイスの定義にもよりますので,
何とも言えません,理論的な内容が伝えることができればいいのですが,
大抵の場合,XXXX_TLB.pas のコードから判断してやってしまうので.
何かのヒントにでもなるといいのですが.

関係ないかな ?
外していたらゴメンナさい.


Quest  2013-04-25 12:44:45  No: 44385

Mr.XRAYさん、こんばんは。

答えにくい質問に、レスありがとうございます。

obj := CreateOleObject('ocxのクラス識別子');
この辺りに糸口がありそうだとは思っていたのですが
この先の記述方法がサッパリで躓いていました。
いろいろググって見て、生成したオブジェクトをasで
キャストしてやって・・・かな?くらいで
何を生成して、何にキャストして、どう使うのかが判らず
COMとかインターフェースの知識が必要だろうという事だけは
なんとなく判りました。(^^;

とりあえず
DefaultInterface.<元のプロパティなどの名前>
の方法で、必要最低限の機能は呼び出せたので
機能検証デモとしては何とかなったのですが
本番までにはインターフェースを勉強してみます。
一応は解決としておいて、後日進展があれば報告します。

因みに、対象物はHITACHIの静脈認証装置です。
RATOCの指紋認証は簡単だったのになぁ。


Quest  2013-04-25 12:46:16  No: 44386

おっと、言ったそばから「解決」し忘れた(^^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加