Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Использование ocx в консольном приложении
Я хочу быстро протестировать ocx. Как мне удалить этот ocx в консольном приложении. Я нашел несколько учебных пособий в CodeProject, но они неполные.
Разве OCX не является ActiveX пользовательским элементом управления? (что-то, что вы помещаете в форму для взаимодействия с пользователем)?
Самый простой способ я знаю, чтобы проверить COM/ActiveX материалов является использование excel. (Да, я знаю, что это звучит глупо, потерпите меня)
- Запустите Excel, создайте новый файл, если он еще не сделал этого за вас
- Нажмите
Alt+F11, чтобы запустить редактор Visual Basic (если у вас есть excel 2007, он находится на вкладке ленты 'Developer').
Теперь, когда вы находитесь в счастливой стране visual basic...
- В меню
ToolsвыберитеReferences - Выберите объект OCX/COM из списка или нажмите кнопку
Browse..., чтобы найти файл, если он не зарегистрирован в COM - вы можете пропустить этот шаг, если ваш OCX уже зарегистрирован. - В меню
InsertвыберитеUserForm - В плавающем окне
Toolboxщелкните правой кнопкой мыши и выберитеAdditional Controls - Найдите свой OCX в списке и отметьте его галочкой
- Затем можно перетащить OCX из панели инструментов в форму пользователя
- Запустите его из меню
Run. Проверьте свой OCX и поиграйте с ним.
Сохраните файл EXCEL, чтобы вам не приходилось повторять эти шаги каждый раз.
Sure..it's довольно легко. Вот забавное приложение, которое я собрал вместе. Я предполагаю, что у вас есть Visual C++.
Сохранить в test.cpp и скомпилировать: cl.exe /EHsc test.cpp
Для тестирования с вашим OCX вам нужно будет либо #import typelib и использовать его 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;
}
@orion это так круто. Никогда не думал об этом таким образом.
Ну @jschroedl это было действительно весело.
Тестирование activex в консольном приложении-это весело. Но я думаю, что не стоит пытаться идти по этому пути. Вы можете вызвать методы или набор и получить свойства либо через способ @jschroedl объяснил или вы можете вызвать объект IDIspatch через функцию Invoke.
Первый шаг - это GetIDsByName и вызов функции через Invoke, а параметры функции должны быть массивом VARIANTS в списке формальных параметров Invoke.
Все это прекрасно и денди. Но как только вы доберетесь до событий, его спуск будет оттуда. Windows приложение требует насос сообщений для запуска событий. На консоли у вас его нет. Я пошел по пути реализации EventNotifier для событий точно так же, как вы реализуете интерфейс CallBack классическим способом C++. Но события не попадают в ваш реализованный интерфейс.
Я почти уверен, что это невозможно сделать в консольном приложении. Но я очень надеюсь, что у кого-то там будет другой взгляд на события в консольном приложении