Форум программистов, компьютерный форум CyberForum.ru

как в VC++ создать ActiveX и использовать его методом позднего связывания? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Голосовая передача - Протокол Сжатия http://www.cyberforum.ru/cpp-beginners/thread461489.html
Меня интересует какой протакол использовать,для сжатия речи перед тем как её кидать в темп... и как он реализуется в C++... какой лучше для UDP,а какой для TCP... кинте пару ссылок пожалуйста... Заранее благодарен VLAD!
C++ После запуска приложения только 2 колонки таблицы Помогите, пожалуйста, разобраться с ADO!!! Я создала SDI приложение. За базовый класс представления взяла CFormView. На форму кинула Microsoft ADO Data Control Vertion 6.0 (OLEDB). Связала её с базой данных через ODBC Data Source Name. Связала с таблицей. Затем на форму кинула Microsoft Data Grid Control Vertion 6.0 (OLEDB) и связала с его ADO Data Control. После запуска приложения у меня... http://www.cyberforum.ru/cpp-beginners/thread461469.html
C++ ADO Data Grid Control
Помогите, пожалуйста, разобраться с ADO!!! Я создала SDI приложение. За базовый класс представления взяла CFormView. На форму кинула Microsoft ADO Data Control Vertion 6.0 (OLEDB). Связала её с базой данных через ODBC Data Source Name. Связала с таблицей. Затем на форму кинула Microsoft Data Grid Control Vertion 6.0 (OLEDB) и связала с его ADO Data Control. После запуска приложения у меня...
Нужно вставить блок на асме, но он не понимает asm и __asm C++
VC понимает директиву __asm, я пишу в данное время под Linux c компилером g++ v.3.0 нужно вставить блок на асме... Но он не понимает не asm и __asm... Если кто сталкивался , не сочтите за труд растолковать... Best Regards Stan
C++ Как заставить программу управлять программами? http://www.cyberforum.ru/cpp-beginners/thread461442.html
Подскажите как заставить программу управлять программами, в случае если необходимо применить много раз одну и ту же операцию из стандартной программы сторонних разработчиков?
C++ g++ i gcc в линукс не принимает директиву Pls ... kto kompilil na G++ compilere pod linux voobschem nujno propisat' code na asm v VC est' direktiva __asm posle kotoroi vozmojno pisat' code na assemblere .... dopustim : ___asm { MOV AX,BX };g++ i gcc v linux ne prinimaet directivu .... подробнее

Показать сообщение отдельно
ioka
0 / 0 / 0
Регистрация: 17.10.2007
Сообщений: 16
17.10.2007, 23:25     как в VC++ создать ActiveX и использовать его методом позднего связывания?
Как я понимаю вопрос касается только позднего связывания,
с ранним связыванием в VC++ всё ясно?

Для позднего связывания я немножко расширил MFC класс COleDispatchDriver.
если делать без MFC, то смотри исходники и вызывай API функции сам.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
///------------Header.file 
class CMyOleDispatchDriver : public  COleDispatchDriver
{
public:
// Constructors
public:
    CMyOleDispatchDriver() : COleDispatchDriver() {};
    CMyOleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE)
                           : COleDispatchDriver(lpDispatch,bAutoRelease) {};
    CMyOleDispatchDriver(const CMyOleDispatchDriver& dispatchSrc)
                           : COleDispatchDriver(dispatchSrc) {};
// Operations
public:
void AFX_CDECL InvokeHelper
 (LPCTSTR ptName, WORD wFlags, VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, ...);
 
void AFX_CDECL SetProperty(LPCTSTR ptName, VARTYPE vtProp, ...);
void GetProperty(LPCTSTR ptName, VARTYPE vtProp, void* pvProp) const;
void AFX_CDECL GetProperty(LPCTSTR ptName, VARTYPE vtProp, void* pvProp, const BYTE* pbParamInfo,...);
 
// Implementation
DISPID GetDISPID(LPCTSTR pchData) const ;
};
 
///------------ Implementation.file 
 
static LPOLESTR LPCTSTRToLPOLESTR(LPCTSTR pchData )
{
   LPOLESTR bstr = NULL;
 
#if defined(_UNICODE)
   bstr = ::SysAllocStringLen(pchData, wcslen( pchData ) );
 
#else
   int nLen = MultiByteToWideChar(CP_ACP, 0, pchData,-1, NULL, NULL);
 
   if ((bstr = ::SysAllocStringLen(NULL, nLen)) != NULL) {
 
      if(MultiByteToWideChar(CP_ACP, 0, pchData, -1, bstr, nLen) == 0) {
         ::SysFreeString(bstr);
         bstr = NULL;
      }
   }
#endif
 
   return bstr;
}
 
DISPID CMyOleDispatchDriver::GetDISPID(LPCTSTR pchData ) const
{
  DISPID dwDispID = NULL;
  
 
  if (m_lpDispatch == NULL) {
    
    TRACE0(_T('Error in CMyOleDispatchDriver::GetDISPID: attempt to call Invoke with NULL m_lpDispatch!
'));
    AfxThrowOleException(E_FAIL);
  }
  else {
 
   LPOLESTR bstrCopy = LPCTSTRToLPOLESTR(pchData);
   if (bstrCopy == NULL) {
 
#if defined(_UNICODE)
         TRACE0(_T('Error in CMyOleDispatchDriver::GetDISPID: convert from LPCTSTRT to LPOLESTR failed!
'));
         AfxThrowOleException(E_OUTOFMEMORY);
#else
         TRACE1(_T('Error in CMyOleDispatchDriver::GetDISPID: convert from LPCTSTRT to LPOLESTR failed w/err %d!
'),::GetLastError());
         AfxThrowOleException(E_FAIL);
#endif
   }
   else {
 
    HRESULT hr = E_FAIL;
    hr = m_lpDispatch->GetIDsOfNames(IID_NULL, &bstrCopy, 1, LOCALE_USER_DEFAULT, &dwDispID);      
 
    ::SysFreeString(bstrCopy);
 
    if (FAILED(hr)) {
        
      TRACE2(_T('Error in CMyOleDispatchDriver::GetDISPID: GetIDsOfNames( '%s ') failed w/err0x%08lx
'),pchData,hr);
      AfxThrowOleException(hr);
    } 
   }
  }
 
  return dwDispID;
}
 
void AFX_CDECL CMyOleDispatchDriver::InvokeHelper
(LPCTSTR ptName, WORD wFlags, VARTYPE vtRet, void* pvRet, const BYTE* pbParamInfo, ...)
{
 
    DISPID dwDispID;
 
    dwDispID = GetDISPID(ptName);
    
    va_list argList;
    va_start(argList, pbParamInfo);
 
          
    InvokeHelperV(dwDispID, wFlags, vtRet, pvRet, pbParamInfo, argList);
 
    va_end(argList);
 
}
 
void CMyOleDispatchDriver::GetProperty(LPCTSTR ptName, VARTYPE vtProp, void* pvProp) const
{
    ((CMyOleDispatchDriver*)this)->
         InvokeHelper(ptName,DISPATCH_PROPERTYGET, vtProp, pvProp, NULL);
}
 
void AFX_CDECL CMyOleDispatchDriver::GetProperty(LPCTSTR ptName, VARTYPE vtProp,void* pvProp,const BYTE* pbParamInfo, ...)
{
    DISPID dwDispID;
 
    dwDispID = GetDISPID(ptN
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru