ocxを素早くテストしたいと思います。どのようにコンソールアプリケーションにocxをドロップするのですか?私はCodeProjectでいくつかのチュートリアルを見つけましたが、不完全です。コンソールアプリケーションでocxを使用する
答えて
確かに簡単です。ここに私が一緒に投げた楽しいアプリです。私はあなたがVisual C + +を持っていると仮定しています。
TEST.CPPとコンパイルするために割引:cl.exeの/ EHsc TEST.CPP
あなたのOCXをテストするために、あなたはどちらかに必要なタイプライブラリを#IMPORT、それがCLSID(または単にハードコードだ使用しますCLSID)をCoCreateInstance呼び出しに追加します。 #importを使用すると、必要なカスタムインタフェースを定義することもできます。
#include "windows.h" #include "shobjidl.h" #include "atlbase.h" // // compile with: cl /EHsc test.cpp // // A fun little program to demonstrate creating an OCX. // (CLSID_TaskbarList in this case) // BOOL CALLBACK RemoveFromTaskbarProc(HWND hwnd, LPARAM lParam) { ITaskbarList* ptbl = (ITaskbarList*)lParam; ptbl->DeleteTab(hwnd); return TRUE; } void HideTaskWindows(ITaskbarList* ptbl) { EnumWindows(RemoveFromTaskbarProc, (LPARAM) ptbl); } // ============ BOOL CALLBACK AddToTaskbarProc(HWND hwnd, LPARAM lParam) { ITaskbarList* ptbl = (ITaskbarList*)lParam; ptbl->AddTab(hwnd); return TRUE;// continue enumerating } void ShowTaskWindows(ITaskbarList* ptbl) { if (!EnumWindows(AddToTaskbarProc, (LPARAM) ptbl)) throw "Unable to enum windows in ShowTaskWindows"; } // ============ int main(int, char**) { CoInitialize(0); try { CComPtr<IUnknown> pUnk; if (FAILED(CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**) &pUnk))) throw "Unabled to create CLSID_TaskbarList"; // Do something with the object... CComQIPtr<ITaskbarList> ptbl = pUnk; if (ptbl) ptbl->HrInit(); HideTaskWindows(ptbl); MessageBox(GetDesktopWindow(), _T("Check out the task bar!"), _T("StackOverflow FTW"), MB_OK); ShowTaskWindows(ptbl); } catch(TCHAR * msg) { MessageBox(GetDesktopWindow(), msg, _T("Error"), MB_OK); } CoUninitialize(); return 0; }
OCXはActiveXユーザーコントロールではありませんか? (あなたがユーザーと対話するためにフォームに置いたもの)?
私がCOM/ActiveXをテストするための最も簡単な方法は、Excelを使用することです。 (はい、私は、それがダム音を知っている私と一緒にクマ)Excelを持っている場合、それは(Visual Basicエディターを起動します
Alt+F11
ためにこれを行っていない場合
- ランExcelは、新しいファイルを作成します2007それは
References
を選択し、...今、あなたは幸せVisual Basicの土地にいることを「開発者リボンタブの事
にTools
メニューから
- です
- リストからOCX/COMオブジェクトを選択するか、
Browse...
をクリックしてCOMに登録されていないファイルを探します。OCXが既に登録されている場合は、この手順をスキップできます。Insert
メニューから - 、浮動
Toolbox
ウィンドウでUserForm
- を選択し、右
Additional Controls
- リストにあなたのOCXを見つけ、あなたはその後、上にツールボックスから、あなたのOCXをドラッグすることができ
- それをチェックをクリックして選択ユーザーフォーム
Run
メニューから実行します。OCXをテストして、それを試してみてください。
エクセルファイルを保存するので、毎回これらの手順を繰り返す必要はありません。
@orion thats so cool。そのように考えたことはありません。
よく@jschroedl thatsは本当に面白かったです。
コンソールアプリケーションでのActiveXのテストは楽しいです。しかし、私はその道を試す価値がないと思う。メソッドを呼び出したり、@ jschroedlが説明した方法でプロパティを設定したり取得したりできます。また、Invoke関数を通じてIDIspatchオブジェクトを呼び出すこともできます。
最初のステップは、GetIDsByNameを呼び出して関数を呼び出すことです。関数のパラメータは、Invoke仮パラメータ・リストのVARIANTSの配列にする必要があります。
すべてが上品で素敵です。しかし、一度あなたはそこから下り坂のイベントに出ます。 Windowsアプリケーションでは、イベントを発生させるためにメッセージポンプが必要です。コンソールには持っていません。私は、古典的なC++の方法でCallBackインターフェイスを実装するのと同じように、イベントのEventNotifierを実装する方法を説明しました。しかし、イベントはあなたの実装されたインターフェイスには達しません。
これはコンソールアプリケーションでは実行できないと私は確信しています。しかし、私は実際にコンソールアプリケーションのイベントを別のものにすることを望んでいます
この方法ではうまくいかないウィンドウレスOCXモジュールがあります。 –