ocx をすばやくテストしたい。その ocx をコンソール アプリケーションにドロップするにはどうすればよいですか。CodeProject でいくつかのチュートリアルを見つけましたが、不完全です。
3 に答える
OCX は ActiveX ユーザー コントロールではありませんか? (ユーザーが対話するためにフォームに置くもの)?
COM/ActiveX をテストする最も簡単な方法は、Excel を使用することです。(はい、私はそれがばかげているように聞こえることを知っています、我慢してください)
- Excel を実行し、これが行われていない場合は新しいファイルを作成します
- を押し
Alt+F11
て Visual Basic Editor を起動します (Excel 2007 を使用している場合は、[開発者] リボン タブにあります)。
幸せなビジュアル ベーシック ランドにたどり着いた今...
Tools
メニューから、References
- リストから OCX/COM オブジェクトを選択する
Browse...
か、ファイルが COM に登録されていない場合はクリックしてファイルを検索します。OCX が既に登録されている場合は、この手順を省略できます。 Insert
メニューから、UserForm
- フローティング
Toolbox
ウィンドウで、右クリックして選択します。Additional Controls
- リストでOCXを見つけてチェックを入れます
- その後、OCX をツールボックスからユーザーフォームにドラッグできます。
Run
メニューから実行します。OCX をテストして、いろいろ試してみてください。
毎回これらの手順を繰り返す必要がないように、Excel ファイルを保存します。
確かに..それはかなり簡単です。これが私が一緒に投げた楽しいアプリです。VisualC++を使用していることを前提としています。
test.cppに保存してコンパイルします:cl.exe / EHsc test.cpp
OCXでテストするには、typelibを#importして、CoCreateInstance呼び出しでそのCLSIDを使用する(またはCLSIDをハードコーディングする)必要があります。#importを使用すると、必要になる可能性のあるカスタムインターフェイスを定義するのにも役立ちます。
#include "windows.h" #include "shobjidl.h" #include "atlbase.h" // //次のコマンドでコンパイルします:cl / EHsc test.cpp // //OCXの作成をデモンストレーションするための楽しい小さなプログラム。 //(この場合はCLSID_TaskbarList) // BOOL CALLBACK RemoveFromTaskbarProc(HWND hwnd、LPARAM lParam) {{ ITaskbarList * ptbl =(ITaskbarList *)lParam; ptbl-> DeleteTab(hwnd); TRUEを返します。 } void HideTaskWindows(ITaskbarList * ptbl) {{ EnumWindows(RemoveFromTaskbarProc、(LPARAM)ptbl); } // ============ BOOL CALLBACK AddToTaskbarProc(HWND hwnd、LPARAM lParam) {{ ITaskbarList * ptbl =(ITaskbarList *)lParam; ptbl-> AddTab(hwnd); TRUEを返します;//列挙を続けます } void ShowTaskWindows(ITaskbarList * ptbl) {{ if(!EnumWindows(AddToTaskbarProc、(LPARAM)ptbl)) 「ShowTaskWindowsでウィンドウを列挙できません」をスローします。 } // ============ int main(int、char **) {{ CoInitialize(0); 試す { CComPtr <IUnknown> pUnk; if(FAILED(CoCreateInstance(CLSID_TaskbarList、NULL、CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER、IID_IUnknown、(void **)&pUnk))) 「CLSID_TaskbarListを作成できません」をスローします。 //オブジェクトで何かをします... CComQIPtr <ITaskbarList> ptbl = pUnk; if(ptbl) ptbl-> HrInit(); HideTaskWindows(ptbl); MessageBox(GetDesktopWindow()、_T( "タスクバーをチェックしてください!")、_ T( "StackOverflow FTW")、MB_OK); ShowTaskWindows(ptbl); } catch(TCHAR * msg){ MessageBox(GetDesktopWindow()、msg、_T( "Error")、MB_OK); } CoUninitialize(); 0を返します。 }
@orionそれはとてもクールです。そのように考えたことはありません。
さて@jschroedlそれは確かに楽しかったです。
コンソールアプリでActiveXをテストするのは楽しいです。しかし、私はその道を試さない価値があると思います。@jschroedlが説明した方法でメソッドを呼び出すか、プロパティを設定して取得するか、Invoke関数を使用してIDIspatchオブジェクトを呼び出すことができます。
最初のステップは、GetIDsByNameを実行し、Invokeを介して関数を呼び出すことです。関数へのパラメーターは、Invokeの正式なパラメーターリスト内のVARIANTSの配列である必要があります。
すべてが元気でダンディです。しかし、イベントに参加すると、そこから下り坂になります。Windowsアプリケーションでは、イベントを発生させるためにメッセージポンプが必要です。コンソールにはありません。従来のC++の方法でCallBackインターフェイスを実装するのと同じように、イベントのEventNotifierを実装するための道を歩みました。ただし、イベントは実装されたインターフェイスには到達しません。
これはコンソールアプリケーションでは実行できないと確信しています。しかし、私は本当に誰かがコンソールアプリケーションでイベントに異なる見方をすることを望んでいます