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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Голосовая передача - Протокол Сжатия http://www.cyberforum.ru/cpp-beginners/thread461489.html
Меня интересует какой протакол использовать,для сжатия речи перед тем как её кидать в темп... и как он реализуется в C++... какой лучше для UDP,а какой для TCP... кинте пару ссылок пожалуйста......
C++ После запуска приложения только 2 колонки таблицы Помогите, пожалуйста, разобраться с ADO!!! Я создала SDI приложение. За базовый класс представления взяла CFormView. На форму кинула Microsoft ADO Data Control Vertion 6.0 (OLEDB). Связала её с... http://www.cyberforum.ru/cpp-beginners/thread461469.html
C++ ADO Data Grid Control
Помогите, пожалуйста, разобраться с ADO!!! Я создала SDI приложение. За базовый класс представления взяла CFormView. На форму кинула Microsoft ADO Data Control Vertion 6.0 (OLEDB). Связала её с...
Нужно вставить блок на асме, но он не понимает asm и __asm C++
VC понимает директиву __asm, я пишу в данное время под Linux c компилером g++ v.3.0 нужно вставить блок на асме... Но он не понимает не asm и __asm... Если кто сталкивался , не сочтите за труд...
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 {... подробнее

Показать сообщение отдельно
ioka
0 / 0 / 0
Регистрация: 17.10.2007
Сообщений: 16
17.10.2007, 23:25
Как я понимаю вопрос касается только позднего связывания,
с ранним связыванием в 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
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru