The Wayback Machine - https://web.archive.org/web/20091204212502/http://www.cyberguru.ru:80/programming/cpp/cpp-outer-script-interpretation.html
 ���������������� arrow C++ arrow ActiveX Scripting Engines: ������������� �������� ������� � �++
-->

ActiveX Scripting Engines: ������������� �������� ������� � �++

����������

������ ����� ������� �������� � ��������� ����������� ������������� �������� �������. ���� �� ������������ ������� � ������ ������������ – ������������ ActiveX Scripting Engines � ������������ VBScript ��� JavaScript. �� ������ ������, ��� ����� ��������� �������� ������ OLE COM ����������. ��������� �� ����� Microsoft ������� ����� ��������� ���-������ ������ ����������, ��������, ����������� METHOD_PROLOGUE � ����������� �������������� ��������� ������ ���������� ��������� pThis. Me��� ���, ����������� ��������� ActiveScript ������ ��������. ������� ������ ���������� ������� ��������� �������, �� ��� � �� ����� – ���� ���������� ������: �������� ��������� �������, �� �������� � ��������. ��� ����� ���������� ��, ��� ��� �����������, � ������ MFC.

������ ����� ������� ��������� � ������������ ������. ����� � �������� ���������� ������ ��������� ��� ����������� ������������ ���������.

�������� ��������.

������ ������ ����������������� � ����� �++ ���������� – ������������ � �������� �������� ����������, ����������� � �++ ����� ���������, ��� �������� �������. ������ ��������� ������:
   dim k
   k = 1
������ �� ����� – ��� ���������� ������ �� ����.
�����, ����� ���������� «k» ���� ��������� �� � ������������ ���� ������ ������� ��� «dim k», � ���-������ � C++ ������ ���, ��������, long k, � ����� ���������� VBScript ������ «k = 1» � �������� ����� ������ 1.

��� ���������� ����� ����������� ������������ �����, ����������� �� �������� MFC ������ CCmdTarget. ���� ����� ������������ �������� �������� ���������� (late binding). ���� �� ��������� � ������, �� �������� ������: ���� ������� ���������� �� ���������� � �������, � ����� ��������� �����. ������ � ���������� ��� ����� ������ �������������� ������� ���������������� ���������� ��������������. ���� � ������� ���� ������ «k = 1», � ���������� ����� long val, �� � ������� ���� ���-�� �������:

struct ENTRY
{
    CString name;
    long*    pval;
};

long val;
ENTRY table[] = 
{
    { "k", &val }
};
UINT nEntryCount = 1;

������ ������ ������� «k = 1» ����������� ���:

for (UINT nIndex = 0; nIndex < nEntryCount; nIndex++)  
if ( table[nIndex].name == "k" )
    {
        *table[nIndex].pval = 1;
        break;
    }

����������, ����������� ���� ������ ����� ������ � ������ ������������ ����� �������. �� �������� ������ ������� �������: ����� �������, �������� ����������, ������������ ��������, �������� ����� � ��� �����.

����, �������� �����, ����������� �� CCmdTarget.

#include <afx.h>
#include <afxdisp.h>
class CCodeObject : public CCmdTarget
{
public:
    CCodeObject();
    virtual ~CCodeObject();

private:
    long    m_nValue;

    long GetMax(long, long);
    void PrintValue(long);
    void Message(LPCSTR);

    enum 
    {
        id_Value = 1,
        id_PrintValue,
        id_GetMax,
        id_Message
    };

    DECLARE_DISPATCH_MAP()
};


����� ������� – ��� ����������� ��� ���������������:
long    m_nValue;
long GetMax(long, long);
void PrintValue(long);
void Message(LPCSTR);

������ ��� ������������ �� �������. ��� ������� �� ��� �������������� �������� �������������
� ������������ (enum):

enum 
{
         id_Value = 1,
    id_PrintValue,
    id_GetMax,
    id_Message
};

����� � .cpp ������ ��������� �������:

BEGIN_DISPATCH_MAP(CCodeObject, CCmdTarget)

DISP_PROPERTY_ID(CCodeObject, "VALUE", id_Value, m_nValue, VT_I4)
DISP_FUNCTION_ID(CCodeObject, "GetMax", id_GetMax, GetMax, VT_I4, VTS_I4 VTS_I4)
DISP_FUNCTION_ID(CCodeObject, "PrintValue", id_PrintValue, PrintValue, VT_EMPTY, VTS_I4)
DISP_FUNCTION_ID(CCodeObject, "Message", id_Message, Message, VT_EMPTY, VTS_BSTR)

END_DISPATCH_MAP()

������ DISP_PROPERTY_ID ��������� ���������� m_nValue � ����� ������ VT_I4 � �������. Ÿ ��������� ������������� "VALUE", �������� id_Value.

������ DISP_FUNCTION_ID ��������� ������� GetMax � ������������ ����� VT_I4 � ����� ����������� VTS_I4 � VTS_I4, �������������� ����� ������.

������ �������, ��� �������� ����� ���������� (��������, property) ��� �������:
- �������� ��������������� ���� ������;
- �������� � enum ����� id;
- �������� ������ ���-������ ����� BEGIN_DISPATCH_MAP � END_DISPATCH_MAP.

������� ������ ����: � ������������ ������ ����������� ������ �������������� ����� ������ EnableAutomation().


 
« ���������� ������   ��������� ������ »

  • C++, ���������� � ����������� (����������) �����������
    ��������� ���� ���������� �������� � ���������� ���������� ����������, ������� ���� ������� ������ ������, ����������� � ��������� �� ������������....
  • C++, ������ ������ ���������������� �� C
    ������ ������ ���������������� �� C....
  • C++, C++. ��������� ����. ����� 2
    ����������� ����� �������� �.�. "C++. ��������� ����"....
  • C++, C++. ��������� ����. ����� 1
    ����� �������� �.�. "C++. ��������� ����" �������� ����������� ����������������� ������������ ������ � ��� �� �.�. ���������� (���� ������ ��� ��������� 2-�� ����� �������������� ���������� ������� ������������ � �����������) � ����� �������������� ���������� (����������� ���� �� ����� ���������������� C++ ��� �������� 10-� �������). � ������������ ������ ��������������� ���� ���������������� C++ ��� ���������� ����....
  • C++, ������� ���������������� �� � � �++. ����� 7-8
    � ���� ����� �������� ������� ���� �������� ��� ����������� ���� ��������� � ���� �������� ������������ ������ ���������������� �� �++ � � - ������, �������, �������, �������� ��� �� �������������, ���� �� ������ �� ������������ � ������ ������. ���� ����������� �� ���������� ����� ������ ��������� ����� ��� ���������������� ��� �� �, ��� � �� �++, � ������� ����� ���������, ������������ ���� � ���� �++ � ������������������� �� ���� ����������� � �������������� �������. ���� �� �������������� ��...
  • C++, ������� ���������������� �� � � �++. ����� 1-6
    �������� ���� ����� �������� ��, ��� � ������ �������� ���������� ��� ������ ��� � �++, ��� � � �: ��� ����� ���� ��� ������� ��������, ��� ���� � ��� ��� ������� � ����������� �������� ���� � �������, �� � ����� �� ������ �������� ���������� ������ �� ����������� ������������� �����������, �������������� � ���� �� ������������ ����������. �� ������ �������� ������ ��� ��� ������ ���� ������, ���� ���� �� ����� �� ������....
  • C++, ��������� ������������������� ���� ��� �������� �� ��
    ���� ��� ����������� � ����� �� ������������� ��� ��������� ��������  ������� � ���������� ��������, �������� ����������� ���� � ��� ����� ����  ���������� ���������.  ������������ ������������ � ����� �� ������������� ���������� � �������  �������� �� ���������� ��������� � ����. � ����������� - � ����������  ������� ����������. ����� - � ������ ��������� ������� ������ ���������  ���������������� 80�86. ����� �������� ������������ ������������� ��������  ����...
  • C++, ����� ���������� - ���� ���������������� �++. ����� 11-13
    ����� 11 - 13 ��������� ��������, ��������� � ����������� �++ ��� �������������� � ���������� ������� ����������� ������. � ����� 11 � �������� ��������������� ������� �������������� � ���������� ������������ ���������.  � ����� 12 ����������� ����������� ����� ������ �++ � ���������� ��������������. � ����� 13 �������� ������� �������� ���������. ����������� ����� ���������� ������������ �� �++....