3

ocx をすばやくテストしたい。その ocx をコンソール アプリケーションにドロップするにはどうすればよいですか。CodeProject でいくつかのチュートリアルを見つけましたが、不完全です。

4

3 に答える 3

3

OCX は ActiveX ユーザー コントロールではありませんか? (ユーザーが対話するためにフォームに置くもの)?

COM/ActiveX をテストする最も簡単な方法は、Excel を使用することです。(はい、私はそれがばかげているように聞こえることを知っています、我慢してください)

  1. Excel を実行し、これが行われていない場合は新しいファイルを作成します
  2. を押しAlt+F11て Visual Basic Editor を起動します (Excel 2007 を使用している場合は、[開発者] リボン タブにあります)。

幸せなビジュアル ベーシック ランドにたどり着いた今...

  1. Toolsメニューから、References
  2. リストから OCX/COM オブジェクトを選択するBrowse...か、ファイルが COM に登録されていない場合はクリックしてファイルを検索します。OCX が既に登録されている場合は、この手順を省略できます。
  3. Insertメニューから、UserForm
  4. フローティングToolboxウィンドウで、右クリックして選択します。Additional Controls
  5. リストでOCXを見つけてチェックを入れます
  6. その後、OCX をツールボックスからユーザーフォームにドラッグできます。
  7. Runメニューから実行します。
  8. OCX をテストして、いろいろ試してみてください。

  9. 毎回これらの手順を繰り返す必要がないように、Excel ファイルを保存します。

于 2008-08-20T22:46:19.743 に答える
2

確かに..それはかなり簡単です。これが私が一緒に投げた楽しいアプリです。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を返します。
}
于 2008-08-22T04:31:00.810 に答える
1

@orionそれはとてもクールです。そのように考えたことはありません。

さて@jschroedlそれは確かに楽しかったです。

コンソールアプリでActiveXをテストするのは楽しいです。しかし、私はその道を試さない価値があると思います。@jschroedlが説明した方法でメソッドを呼び出すか、プロパティを設定して取得するか、Invoke関数を使用してIDIspatchオブジェクトを呼び出すことができます。

最初のステップは、GetIDsByNameを実行し、Invokeを介して関数を呼び出すことです。関数へのパラメーターは、Invokeの正式なパラメーターリスト内のVARIANTSの配列である必要があります。

すべてが元気でダンディです。しかし、イベントに参加すると、そこから下り坂になります。Windowsアプリケーションでは、イベントを発生させるためにメッセージポンプが必要です。コンソールにはありません。従来のC++の方法でCallBackインターフェイスを実装するのと同じように、イベントのEventNotifierを実装するための道を歩みました。ただし、イベントは実装されたインターフェイスには到達しません。

これはコンソールアプリケーションでは実行できないと確信しています。しかし、私は本当に誰かがコンソールアプリケーションでイベントに異なる見方をすることを望んでいます

于 2008-08-23T15:02:46.743 に答える