• 締切済み

VB2005でOCXを動的に呼び出すには?

お世話になります。 当方の環境はWinXP SP2,VB2005Proです。 現在作成中のアプリで、とあるCOMコンポーネントを使っているのですが、 どうやら そのOCXが自由配布は出来ないようで、依頼元から 「OCXがインストールされている場合のみ、それを使用する機能を  生かしてほしい」 と言われました。 依頼元曰く「たぶんコンポーネントを参照設定せずにコーディング しないといけないと思う」との事なのですが、それは可能なのでしょうか? また、可能であれば、方法(または方針)を教えていただけると有難いです。 (もしかしてOCXと処理を完全に分離してDLL化しないとダメ?)

みんなの回答

回答No.1

参照設定せずにコーディングすることは可能です。 ただし、その OCX が提供するクラスのインスタンスを Dim a As XXX や Dim b As XXX.YYY といった形で宣言しているところは全て Dim a As Object Dim b As Object のように As Object で宣言しなければなりません。 また、参照設定しているときにはコンパイルエラーになっていたコーディングミス ( 例えば、メソッド名やプロパティ名の間違い ) が、コンパイル時にはエラーにならず、実行時にエラーになるので注意が必要です。

K-Sogacchi
質問者

お礼

遅くなりましたが、回答ありがとうございます。 インスタンス生成時に、実際にクラス名を割り当てる感じですね。 ただ、申し訳ありません、言い忘れていたのですが、 コーディング規約として「Option Strict On」の状態でコーディング しなければいけない事になっているのですが、その場合でも 大丈夫なのでしょうか? あと、そのクラス名自体を どうやって認識させるのかも気になるところなのですが…… System.Reflection.Assembly.LoadFromってOCXでも大丈夫なんでしょうか? (Reflection自体が、今のところ調べても混乱状態なのですが(汗))

K-Sogacchi
質問者

補足

補足というか自己レスで申し訳ありません。 結局、OCXをラップしてDLL化する方向で開発を行いまして、何とか想定どおりの 動作を行うことが出来るようになったようです。 恐れ入りますが、ここで この件は打ち切りとさせて頂きます。 お騒がせしました。 (余談) しかし、CreateDelegateとかEventInfo.AddEventHandlerとかの詳細は なかなか無いですね…結局英語の掲示板とかを眺める事になってしまいました。

関連するQ&A

  • VC++のOCXが、VBで登録できません

    ご教示願います。 VC++で、OCXの雛形を作成し(ウィザードにより作成) そのままビルド、カスタム処理の無いOCXを作りました。 そのOCXをVBで「コンポーネントの参照」をしようと思ったのですが 「ActiveXコンポーネントとして登録できない」とエラーが 出てしまいました。 その前に、色々と処理を書いたOCXを登録しようと思っても 同じエラーが出たため、コードが悪いのかと思い ためしに雛形の登録をしてみたのです。 なぜ登録できないのか、何か気づいた方が いらっしゃいましたら、教えて頂けますでしょうか。 ※この設定をしないといけない、等等・・。 宜しくお願い申し上げます。 バージョンは、どちらも6.0です。

  • VB6で作成したOCXをASPから呼び出すときのセキュリティについて

    VB6(SP6)でOCXを作成しました。VBのディストリビューションウィザードでは「配置」を選択して作成しました。 このOCXをASP(VBS)を使ってWeb画面から呼び出しています。 このOCXを参照した時、ブラウザがOCXをダウンロードしようとしますが、PCによってはダウンロードされないことがあります。ブラウザのセキュリティ設定を確認していますが、他に影響のある設定はあるのでしょうか? WebサーバーはWindowsXP(SP3)でIIS6を使用しています。 クライアントはWindowsXP(SP3)でIE7で参照しています。 ダウンロードされたかどうかはブラウザのインターネットオプションから、インターネット一時ファイルの「オブジェクトの表示」で確認しています。 よろしくお願いいたします。 質問内容に不備などありましたらご指摘いただけると助かります。

  • VB2008でDLLの取込みできない

    VB2008Expressが無料配布していたので始めたばかりの初心者です。 玄人志向の学習リモコン「KURO-RS」(PC-OP-RS1)を操作するアプリを作ろうと試みているのですが、付属のSDKや下記コントロールDLLのVB2008への取り込み方がわかりません。 「PC-OP-RS1-CONTROL.DLL」 http://1c3.world.coocan.jp/wiki/ (「2008-06-08コントロールDLLを作ろう」にあります。VC++ソースもあります) 『参照の追加』を行っても「’~.dll’への参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」とメッセージが出て取り込むことができませんでした。

  • VB4のWin2000、WinXP対応

    VB4で作成したプログラムがWin2000やWinXPで実行できないようで 私もそのような環境を持ち合わせておらず困っています。 DLLファイルかOCXファイルの読み込みの際にエラーが起こるようなのですが 下記のファイルが各OSに対応しているかどうかおわかりになる方おられますか? もしくはファイルをいれる場所が悪いのでしょうか? また、対応させる手段はありますか? 1.VB4JP32.dll 96/03/09 2.VB40032.dll 96/01/12 3.MSCOMM32.ocx 98/06/24 4.COMCTL32.ocx 98/06/24 5.RICHTX32.ocx 96/03/09 6.TABCTL32.ocx 96/09/04 どうかよろしくお願いします。

  • VBで作成したEXEが使用しているOCX,DLLを見る方法

    VBで作成したEXEがあります。 ただ残念な事に、タイで作成したこともあり、ソースがありません。 それ故に、あるPCでは動作し、あるPCでは動作しないといった不具合の原因が調査できずに困っています。 エラーの内容としては「ActiveXコンポーネントが作成できない」旨のエラーですので、何かのDLLもしくはOCXの登録が抜けていると思うのですが、どのファイルかが分からず困っています。 現行動作するマシンがありますので、タスクマネージャの様な感じでEXEが使用しているOCX,DLLを見る方法があれば助かるな~。と思い質問させていただきました。 ご存知の方、どうぞご教授頂けますと大変ありがたいです。 どうぞよろしくお願い致します。

  • MSCOMM32.OCXがWinXPで使用不可

    VB6で開発を行っておりますが、Win98SE 及びWin2000ではOSがMSCOMM32.OCXを配布しておりましたが、WinXPでは、Windows\System 又はSystem32に入っておりません。 シリアルポートでのデータのやり取りを行いたいのですが、MSCOMM32.OCXは使用できないのでしょうか。 また、それにかわる部品はありませんでしょうか。 ちなみに、Win2000で配布しているMSCOMM32.OCXをWinXPのWINDOWS\SYSTEM32フォルダにコピーし、レジストリに登録しましたが、正常に動作(データのやり取り不可)しませんでした。

  • VB6から.NETへアップグレード時について

    VB6+WindowsNT4.0からVB.NET(2005)+WindowsXPにアップグレードをしようとしていますが、 アップグレード中に以下のようなエラーが発生し中断されます。 アップグレードに失敗しました。 例外が発生しました。参照されたコンポーネントを読み込みませんでした。 プロジェクトをアップグレードする前に、このコンポーネントをインストールする必要があります。 COMCT232.ocx(1.1.0) COMCT232.ocxがインストールされているかどうしたら調べることができますか? PCに全く詳しくないのでご教授お願いします。

  • エクセル2003から2007 のOCX 問題

    2003で VBAでソフトを作りましたが、2007のみの環境で エラーが出ます。 参照設定 MS-WIN-common-controls-2 6.0  MSCOMCT2.OCX が 引っかかります。 マイクロでは 2007で このOCXを 無くしました。結局 20年前の DLL地獄の再来なのですが、 読み込んだファイル、2007で参照設定 MS-WIN-common-controls-2 6.0 を外して、 2003と2007 両方存在する環境ならば 07ファイルに 変換しても OK 07のみだと、エラー それも、len() trim() など どうでもいいようは 構文です。 2007で これに相当する OCX もしくは DLL ご存じ方いらっしゃいませんでしょうか もしくは 03から 07に変換する作業で 一番簡単な方法は如何でしょうか 03でファイルを吐き出して、07で 読み込んでも 解決するのでしょうか?どうも ダメなような気がするのですが・・・・ よろしくどうぞ ネットで配布するような使い方ですので レジストリー登録は 出来ないのです。 ちなみに 2010 のみの環境なら それはまたOKなのです。

  • VB6のアプリケーションの配布

    VB6でアプリケーションを作成したのですが、他のマシンに配布する場合に実行形式(EXE)だけだと、DLLやOCXなどの有無やバージョンの違いで動作しないのですが、Setup.exeなどダブルクリックするだけで、インストールできるようにしたいですが、方法がわかりません。 VBのランタイムは、このSetup.exeより先にインストールしないと、Setup.exe自体でインストールが中断されるのでしょうか? あと、.NETですがVB6のようにDLLやOCXの有無・バージョン違いなど気にせず簡単に配布できるのがメリットの一つと解釈しても良いのでしょうか? このように配布・インストール関連で詳しい書籍などご存知でしたら教えてください。 インストーラソフトというものは言葉聞いたことがあるのですが、 .NET使うならば、あまり必要ないのでしょうか?これもお勧めのインストーラソフトがあるのでしたらご教授下さい。

  • VB6 でランタイムのエラー?

    MS VB6 を起動したところ、 「コンポーネント mscomctl.ocx またはその依存関係のひとつが適切に登録されていません。 ファイルが存在しないか、あるいは不正です」 というエラーが出て、VBが起動できません。 ネットで調べてみたら、ランタイムを再度インストールすればいいようなことが書かれていましたが、 実際のところどうなのでしょうか? SP3用のランタイムって入手可能でしょうか? 全然分からないので、よろしくお願いします。 ちなみに Windows Xp VB6 (SP3) です。

専門家に質問してみよう