문제

내가 원하는 신속하게 테스트하는 ocx.어떻게 드롭 ocx 에서 콘솔 응용 프로그램입니다.내가 찾는 일부 튜토리얼에서 CodeProject 고 하지만 완전하지 않습니다.

도움이 되었습니까?

해결책

지..그것은 매우 쉽습니다.여기 재미있는 응용 프로그램 던진다.나는 가정 당신은 Visual C++.

저장 test.cpp 컴파일:cl.exe /포함 test.cpp

을 테스트하는과 함께 당신의 OCX 해야 합하여 하나#import typelib 고 그것을 사용하의 CLSID(또는 그냥 하드 코딩 CLSID)에 CoCreateInstance 호출합니다.를 사용하여#가져올 것입니다 또한 도움말을 정의 사용자 인터페이스 할 수도 있습니다.

#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 물건을 사용합니다.(네,그것을 알고 벙어리 소리,곰이 나와 함께)

  1. 실행 Excel,새 파일을 만들지 않는 경우에 이것을 위해 당신
  2. Alt+F11 을 시작 Visual Basic 편집기(이 있는 경우 excel2007 년에'개발'리본 탭 일

이제는 당신이 행복한 시각 기본적인 토지...

  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 파일을 저장 하지 않도록 이 단계를 반복합니다.

@orion 그게 정말 멋지다.생각하지 않을 수도 있습니다.

아@jschroedl 습니다 재미있는 사실.

테스트 activex 에서 콘솔 응용 프로그램은 재미이다.그러나 내가 생각한 그것의 가치가 해보지 않는 경로입니다.호출할 수 있는 방법들을 통해 또는 설정하고 속성 중 하나를 통해 방법@jschroedl 했 설명 또는 당신을 호출 할 수 있습 IDIspatch 체를 통해 호출 기능입니다.

첫 번째 단계는 GetIDsByName 및 함수를 호출을 통해 호출하고 매개변수 함수해야의 배열 개에서 호출에 공식적인 매개 변수 목록입니다.

모두가 멋.하지만 일단 당신이하는 이벤트의 거기에서 내리막.Windows 응용 프로그램에 필요한 메시지 펌프를 불 이벤트입니다.콘솔에서 당신은 하나도 없어.가 경로를 구현하 EventNotifier 이벤트에 대한 당신처럼 구현 콜백을 인터페이스는 고전적인 C++방법입니다.그러나 이벤트지 않을 구현한 인터페이스입니다.

나는 확신이 할 수 없습에 콘솔 응용 프로그램입니다.하지만 내가 정말 누군가를 희망하는 것 밖에 있는 다른 걸 이벤트에서는 콘솔 프로그램

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top