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을 사용하는 것입니다. (네, 그것은 바보 같은 소리로 들리 겠지만 나와 함께 부담) 당신은 엑셀이있는 경우는 (Visual Basic 편집기를 실행 할 수
Alt+F11
이 일을하지 않은 경우
- 실행 Excel에서, 새로운 파일을 생성 2007 그것은
Tools
메뉴에서- ,
References
...를 선택합니다 '개발자'리본 탭 것은 지금 당신은 행복 Visual Basic의 땅에서 걸
에의
- ,
- 목록에서 OCX/COM 개체를 선택하거나
Browse...
을 클릭하여 COM에 등록되지 않은 파일을 찾습니다. OCX가 이미 등록 된 경우이 단계를 건너 뛸 수 있습니다.Insert
메뉴에서 - 마우스 오른쪽 버튼으로 클릭하고
Additional Controls
- 선택 목록에서 OCX를 찾아서는
- 그런 다음에 도구 상자에서 OCX를 드래그 할 수 있습니다 틱, 부동
Toolbox
창에서UserForm
- 을 선택 userform
Run
메뉴에서 실행하십시오.OCX를 테스트하고 함께 놀아보십시오.
엑셀 파일을 저장하면 매번이 단계를 반복하지 않아도됩니다.
@orion 너무 멋지다. 그렇게 생각하지 마십시오.
잘 @jschroedl thats는 참으로 재미있었습니다.
콘솔 앱에서 activex를 테스트하는 것은 재미 있습니다. 그러나 나는 그 길을 시도하지 않는 것이 가치 있다고 생각한다. @jschroedl이 설명한 방법을 통해 메서드를 호출하거나 속성을 설정하거나 가져올 수 있으며 Invoke 함수를 통해 IDIspatch 개체를 호출 할 수 있습니다.
첫 번째 단계는 GetIDsByName을 호출하고 Invoke를 통해 함수를 호출하고 함수의 매개 변수는 Invoke 형식 매개 변수 목록의 VARIANTS 배열이어야합니다.
모두 훌륭하고 멋쟁이입니다. 그러나 일단 당신이 거기에서 내리막 길에 도착하면. Windows 응용 프로그램에서는 이벤트를 발생시키는 메시지 펌프가 필요합니다. 콘솔에는 콘솔이 없습니다. 클래식 C++ 방식으로 콜백 인터페이스를 구현하는 것처럼 EventNotifier를 구현하는 경로를 따라 갔다. 그러나 이벤트는 구현 된 인터페이스로 전달되지 않습니다.
저는 콘솔 응용 프로그램에서이 작업을 수행 할 수 없다고 확신합니다. 하지만 콘솔 응용 프로그램에서 다른 사람이 이벤트를 처리하기를 바라고 있습니다.
- 1. C# .NET 콘솔 응용 프로그램에서 OCX 컨트롤 사용
- 2. 콘솔 응용 프로그램에서 WebBrowser 사용
- 3. 콘솔 응용 프로그램에서 web.config를여시겠습니까?
- 4. Java에서 .OCX 컨트롤 사용
- 5. 콘솔 응용 프로그램에서 메시지 표시
- 6. Mac OpenGL 응용 프로그램에서 콘솔
- 7. 콘솔 응용 프로그램에서 타이머 작동
- 8. 콘솔 응용 프로그램에서 그림 인쇄
- 9. 콘솔 응용 프로그램에서 WinForm 인스턴스화
- 10. 다른 콘솔 응용 프로그램에서 콘솔 응용 프로그램을 실행하십시오.
- 11. Matlab의 OCX 라이브러리에서 명령어 사용
- 12. 비 -MFC 응용 프로그램에서 activeX 개체 사용
- 13. 내 응용 프로그램에서 2 DLL (OCX)를 사용하려고 시도하는 델파이
- 14. 왜이 콘솔 응용 프로그램에서 스레드가 순차적으로 실행됩니까?
- 15. 응용 프로그램에서 여러보기 사용
- 16. 콘솔 응용 프로그램에서 IP 주소 얻기
- 17. 은 .net 콘솔 응용 프로그램에서 백분율을 표시합니다.
- 18. 콘솔 응용 프로그램에서 MVP를 구현하는 방법?
- 19. 콘솔 응용 프로그램에서 런타임 키 누르기 감지
- 20. 콘솔 응용 프로그램에서 백그라운드에서 듣고있는 # keypress
- 21. 콘솔 응용 프로그램에서 창 메시지를 수신하도록하려면 어떻게합니까?
- 22. 다른 응용 프로그램에서 MacOSX의 콘솔 로그를 얻으십시오
- 23. Objective-C 콘솔 응용 프로그램에서 문자열을 읽으십니까?
- 24. Win32 콘솔 응용 프로그램에서 커서 위치 설정
- 25. 콘솔 응용 프로그램에서 연결 문자열 가져 오기
- 26. 콘솔 응용 프로그램에서 동기 키 스트로크 읽기
- 27. SPSecurity.RunWithElevatedPrivileges는 콘솔 응용 프로그램에서 어떤 작업을 수행합니까?
- 28. 콘솔 응용 프로그램에서 타이머를 사용하려면 어떻게해야합니까?
- 29. MSVC++ 콘솔 응용 프로그램에서 어떻게 잠자기합니까?
- 30. 현재 실행중인 콘솔 응용 프로그램에서 메소드를 호출하십시오.
이 방법으로는 작동하지 않는 창없는 OCX 모듈이 있습니다. –