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を実装するための道を歩みました。ただし、イベントは実装されたインターフェイスには到達しません。
これはコンソールアプリケーションでは実行できないと確信しています。しかし、私は本当に誰かがコンソールアプリケーションでイベントに異なる見方をすることを望んでいます