• ベストアンサー

WIN32でOCXを利用する方法を教えて下さい!

MFCでOCXを利用する方法は、MFCのウィザードに従ってActiveXを使うを選び、 AfxEnableControlContainer(); を書けば良いとわかり、実際に使用出来ています。 さて、ところで、Win32でOCXを利用する方法がありましたら、是非、教えて下さい。 いつも、リソース.rcの作成だけはVC++6.0を使っていているのですが、ダイアログにOCXを貼り付けてCTRL+TでテストするとそのOCXは正常に動く!だけに、これがwin32で使えないのはもったいないような気がしてしまうのです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

とりあえず見つけてみました。 MFCを使わずにFlash.ocxを使うサンプル。 http://www.denpa.org/~go/denpa/200304/from11.html ただし、これもATLを使っているのでWin32SDKのみで作っているわけではありません。 これを見て簡単と思うか難しいと思うかはgoonejpさんしだいかと。

goonejp
質問者

お礼

ありがとうございます。 cl atlflash.cpp /link atl.libですね! いつも、メーリングリストやいろいろなところでパソコンに関する質問をする度に、世界は広くて、すごい人たちがいっぱい居ることに感動させられます。 今回は、日本からの情報で感動させられました。 海外でも、私と同じ質問をしている人を10人くらい見かけましたので、まさにそんな私たちのような者にとって福音です!感謝します。 また、これを機に、他の方からご指摘していただいたような点も、機会があったら勉強してみたいと思います。フラッシュは表示できましたが、やはり、表示する以上にいろいろ出来たほうがいいですから…。 ありがとうございました。

その他の回答 (3)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>Using COM objects from MFCと題した次のページには、 >「visibleなCOMコントロールの使用は、簡単!」と書いて >あるようなのですが、私には???で、わかりませんでした。 タイトルの、"from MFC"はどこに行ったんですか? どう見ても、MFCからの利用は簡単といってるんですけど。 それにこのページ、MFCを使用した視覚的ではないCOMオブジェクトの使用法なんですけど。 翻訳サイトでも使ってちゃんと訳して読んでください。 http://www.nifty.com/globalgate/ ちなみに、ここなんですが、 >AfxEnableControlContainer(); >を書けば良いとわかり、実際に使用出来ています。 って、ActiveXコントロールを表示しただけですか? ソース中からプロパティを設定したりとかしましたか?メソッド呼びましたか? ただ貼り付けて表示されただけで使えたと思ってません?イベントはどうしました? urlの内容で、ClassWizardでCOMのラッパークラスを 作成するとあるのはわかりますか? これはMFCでActiveXコントロールを使用するのでも 必要な作業なんですけど。 MFCを利用してActiveXコントロールを本当に使っていたんですか? >ちょっとした簡単なプログラムに、フラッシュを >貼り付けて表示できたら素敵なことなので、 >皆さん、やってみたいと思う人が多いような気が >するのですが…。 ものすごい矛盾したことを書いていることに気づいていますか? 私は、ActiveXコントロール使用するアプリを、MFCを使わないでC++で作成すること自体が簡単ではないといっているのです。 簡単に使いたいのであれば、MFCを使ったり、最初からActiveXコントロールをサポートしているVBなどを使えばいいんですから。 その、「簡単ではない」部分を吸収しているのがMFCであり、VBなのですから。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>目標を絞りますと、「winmain.cppの一つのファイルと >リソース.rc、makefileだけから構成される、 >ocxを使う簡単なプログラムを、VC++ではない >エディタでプログラムを書きたい!」という >ことなので、VCのマクロやMFC、あるいは、 >その他を使っても結構です。 簡単なプログラムでは不可能です。 戻りますけど、COMってわかりますか? インターフェイスってわかりますか? 次に挙げるものがAciveXコントロール側の必要なインターフェイスです。つまり、最低限これらに対する呼び出し元の処理が必要になります(全部ではないですが)。イベントをサポートするのならさらに必要です。 ・IUnknown ・IOleObject ・IOleInPlaceObject ・IOleInPlaceActiveObject ・IOleControl ・IDataObject ・IViewObject2 ・IRunnableObject ・IDispatch ・IConnectionPointContainer ・ISpecifyPropertyPages ・IProvideClassInfo ・何らかの永続記憶用インターフェース これらの意味がわからないようでしたらあきらめてください。 ちなみに、私もMFCやATL等を使わないとC++からActiveXコントロールは使えません。 それでもチャレンジしたいのでしたら、おそらくこちらの本には書かれているかと Inside OLE http://www.microsoft.com/japan/info/press/JPN_ViewMsPress.asp?Book_id=142&list_id=1 購入してチャレンジしてみてはいかがですか? >結構、似たようなことをやりたい!と考える人は多いと思いますので、同好の方よろしくお願い致します。 あまりいないと思います。大変だとわかっている人のほうが多いので。

goonejp
質問者

補足

すみません。さらに目標を絞りますと、「フラッシュ(flash.ocx)をダイアログに貼り付けて表示したい」のです。ただ、フラッシュを表示するだけです。 ちょっとした簡単なプログラムに、フラッシュを貼り付けて表示できたら素敵なことなので、皆さん、やってみたいと思う人が多いような気がするのですが…。 Using COM objects from MFCと題した次のページには、「visibleなCOMコントロールの使用は、簡単!」と書いてあるようなのですが、私には???で、わかりませんでした。 http://www.murrayc.com/learning/windows/usecomfromMFC.shtml 是非、フラッシュをダイアログに表示してみたい!と、この問いかけをきっかけに欲望を起こされた方でも結構です。(^^;) ゆっくりとお待ちしておりますので、よろしくお願い致します。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

まず、WIN32って何を指して言ってるんですか? Win32ってWin32APIを使ったMFCを使わないプログラムのことをさしています? >さて、ところで、Win32でOCXを利用する方法がありましたら、是非、教えて下さい。 まず結論からいうと、できます。Win32SDKで書かれたMFCで使えるのですから当然ですよね。 ただし、使い方は非常に複雑です。 OCXとやり取りをするための取り決めをすべて自前で実装する必要があります。 まず、COMの知識は必須です。必要なCOMのインターフェイスも かなりの数にのぼります。 というような、かなり大変なことをMFCが見えないところで処理をしてくれているのでMFCでは簡単にOCXが使えます。 デザインのテストでは、VC++がそのあたりを処理してくれているので表示はできるということです。

goonejp
質問者

補足

目標を絞りますと、「winmain.cppの一つのファイルとリソース.rc、makefileだけから構成される、ocxを使う簡単なプログラムを、VC++ではないエディタでプログラムを書きたい!」ということなので、VCのマクロやMFC、あるいは、その他を使っても結構です。 winmain.cppは、多少、長くなっても結構です。 どなたか、そういうことを試みて成功している人がいらっしゃいましたら、情報をお願い致します。 結構、似たようなことをやりたい!と考える人は多いと思いますので、同好の方よろしくお願い致します。

関連するQ&A

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

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

  • regsvr32でActiveX登録を行ったocx

    regsvr32 で ActiveX登録を行った ocx がリソースエデイタ「のActiveX コントロールの挿入」で使用できなくて困ってます。 開発環境は VisualStudio2005 の VC++ で、Version は 8.0.50727.867 になります。 レジストリエディタで確認すると以下のレジストリキーで登録されていることを確認できるのですが。 HKEY_CLASSES_ROOT\CLSID\{9BD4A8F2-56BA-11D3-915D-00C04F797034} 『ActiveX コントロール テスト コンテナ』の「コントロールの登録」ダイアログで表示される一覧中には含まれていません。 また、「コントロールの登録」ダイアログで「登録」ボタンを押しても一覧に追加も行われません なんとなくセキュリティっぽい事までは分かるのですが、どなたかヒントをお持ちでしょうか?

  • ActiveX の VC++ での利用

    ある制御装置をパソコンからの命令で動かしたいのですが,その装置の SDK が ActiveX コントロールの形で提供されています.プログラミングは VC++ で行いたいのですが,ActiveX を VC++ で利用する方法がイマイチわからず,困っております. 当方の環境は Visual Studio 6.0 または 2003 です.どちらでも利用できますが,できれば 2003 を利用したいと考えております. まず MFC アプリケーションを作成し,ダイアログエディタで右クリック→ActiveX コントロールの挿入で,使用する ActiveX コントロールを貼り付けます. ここまでは合っていますでしょうか?  私の勉強不足で申し訳ないのですが,ここから先をどう進めてよいのかわかりません. あくまでもイメージなのですが,その ActiveX が提供する関数を C コードの中で呼び出す,といった形で使用できないでしょうか? わかる方いらっしゃいましたら,よろしくお願いいたします.

  • VCで作ったOCXをIEで表示

    こんにちは、honiyonです。  VC++6でOCXを作成し、IEに表示させようとしたのですが、  ×マークしか出てきません。  手順は以下の通りです。  1.VC++6で MFC ActiveX ControlWizardで標準値のままプロジェクト作成。  2.ビルド  3.念の為手動で regsvr32で登録  4. odlファイルでclassidを確認。   ※以下の位置を確認しました。 // CDDE_OCX7Ctrl のクラス情報 [ uuid(8BB5BBFC-D7FE-4BC2-9652-75F22695833C), helpstring("TEST Control"), control ] coclass TEST  5.HTML記述 <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <OBJECT classid="clsid:8BB5BBFC-D7FE-4BC2-9652-75F22695833C" id="TEST" type="application/x-oleobject" width=100 height=100></OBJECT> </BODY> </HTML>  これでIEで表示させると×マークになってしまいます。  アドオンの管理で確認すると確かに読み込まれているのですが...。  因みにメソッドやプロパティも作成してみましたが、実行出来ません。(サポートされていないメソッド云々と怒られます)  表示できない理由を確認する方法はないでしょうか?  また、お気づきの点がありましたら教えてください。  宜しくお願いします(..   

  • comdlg32.ocxライセンス(Access)

    Win98 Access2000 で、comdlg32.ocxを使いたいと思い、ActiveXコントロールを見たのですが、利用可能なコントロールにMicrosoft Common Dialog Controlがありませんでした。 C:\WINDOWS\SYSTEMに、comdlg32.ocxが入っていませんでした。 Win98のCD-ROMのtoolというディレクトリのsetupをおこなったら、comdlg32.ocxが入ってきて、regsvr32.exeを起動したところ、Access2000のActiveXコントロールの利用可能なコントロールに表示されたのですが、いざ、Formに登録しようとしたら、 「このActiveXコントロールを使用するライセンスがありません。」 とメッセージが出てきてしまいました。 VB6.0 SP3のランタイムをセットアップしたり、Office2000を削除し、再インストールしたり、 regsvr32で、レジストリの内容を削除して、登録しなおしたり、思いつくことはいろいろやってみたのですが、状況はかわりません。 お力添えを、お願いします。

  • VC++ Windows2000 でリソースが開けない

    環境:Windows2000SP2 Visual C++ 6.0 SP5 VC++ 超初心者です。 MFCアプリウィザード(EXE)でSDIアプリケーションのスケルトンを作成し、手を加えずにビルドしましたが、エラー 「F:\…test5\test5.rc(11) : fatal error RC1015: cannot open include file 'afxres.h'.」 rc.exe の実行エラー が出て実行できません。 また、リソースウィンドウを開いてみると、リソースが一つも表示されずにその代わりに、 「ロードに失敗しました」と表示されています。 VC++をWindows2000で使用する場合には、何かしなければいけないのでしょうか?

  • ソースから参照しているOCXの一覧を確認する方法

    Visual Basic 6.0のプログラムを多数担当することになったのですが、ドッキュメントはなく、ソースだけがたよりの状態です。 サードパーティ製のOCXを使っているようなのですが、ソースから、利用しているOCXやDLL、ActiveXなどの外部コンポーネントを一覧する良い方法を教えて下さい。

  • ダイアログの丸ごとコピー

    VC++6.0でMFCのプロジェクトを作っています。Aのプロジェクトで作成したダイアログを別のBプロジェクトで丸ごと(リソースもクラスも)コピーして利用することはできますか。出来るなら方法を教えてください。

  • ACTIVEX(OCX)コントロールでのバージョンプロパティの設定

    現在、VC++でACTIVEX(OCX)コントロールを作っています。 プロパティ VERSION でVS_VERSION_INFOのFILEVERSIONの値を返却するようにしたいと思っています。 また、VBなどに貼り付けたときにプロパティ VERSIONのところにバージョンが表示されるようにしたいと思っています。 GetFileVersionInfo を使ってバージョン情報を取得する関数は作成したのですが、この関数を本来どこでCALLすべきなのかがわかりません。 VC++は初めてなので、よくわかっていません。 教えていただけないでしょうか。 また、GetFileVersionInfo を使用せずに簡単にバージョンをプロパティとして提供する方法があれば教えてください。

  • MFC ダイアログ上のID取得について

    VC++6.0 MFC ダイアログベースで開発しています。 リソースエディタで配置したダイアログ上にある全てのコントロール(ボタン、テキスト等)IDを取得する方法はありませんか? よろしくお願いします。

専門家に質問してみよう