1. Написал на Qt activeX контролл. У него есть свойство setColor(QColor). Добавляю этот контролл, например в MFC проект. В редакторе формы MFC все ок, свойство можно настраивать. Однако при попытке программно обратится к этому свойству возникают некоторые вопросы:
1.1 Почему свойство изменило свое имя с setColor на Setcolor?
1.2 Почему в параметрах Setcolor стоит не QColor, а unsigned long? Что туда передавать - COLORREF или как-то нужно по особому формировать данные о цвете?
2. Можно ли передать клиенту (программа на MFC) методы, в качестве параметров в которых стоят типы данных определенные в контролле, например:
Метод setMarker(MarkerProperty prop);
//Класс описывающий свойства маркера
class MarkerProperty : public QObject
{
	Q_OBJECT
	Q_ENUMS(MarkerStyle)
	Q_PROPERTY(QString title READ title WRITE setTitle)
	Q_PROPERTY(MarkerStyle style READ style WRITE setStyle)
	Q_PROPERTY(int size READ size WRITE setSize)
	Q_PROPERTY(QColor color READ color WRITE setColor)
	Q_PROPERTY(bool backGround READ backGround WRITE setBackGround)
	Q_PROPERTY(QColor bgColor READ bgColor WRITE setBgColor)
	Q_PROPERTY(QColor bgColor READ bgColor WRITE setBgColor)
	Q_PROPERTY(QPointF position READ position WRITE setPosition)
public:
	MarkerProperty(QObject *parent = 0);
	//копирующий конструктор
	MarkerProperty(const MarkerProperty &marker) : QObject( marker.parent() ) {
		assign(marker);
	}  
	//Перегрузка оператора присваивания
	inline MarkerProperty& operator = (const MarkerProperty &marker) {
		assign(marker); 
		return *this;
	}	
	//Копирование полей класса
	void assign(const MarkerProperty &marker);
private:
	void initialize();
public:
	//Тип маркера
	enum MarkerStyle{
		NoMarker,
		Arc,
		Quad,
		X,
		Plus,
		PlusNx,
		Romb,
		TriDown,
		TriUp,
		TriLeft,
		TriRight,
		Star5,
		Star6
	};
	QString title() const{ return m_title; }
	MarkerStyle style() const{ return m_style; }
	int size() const{ return m_size; }
	QColor color() const{ return m_color; }
	bool backGround() const{ return m_backGround; }
	QColor bgColor() const{ return m_bgColor; }
	QPointF position() const{ return m_position; }
	void emitAll();
public slots:
	void setTitle(QString text);
	void setStyle(MarkerStyle style);
	bool setStyle(int style);
	void setSize(int size);
	void setColor(QColor color);
	void setBackGround(bool on);
	void setBgColor(QColor color);
	void setPosition(QPointF pos);
signals:
	void propertyChanged();
	void titleChanged(QString);
	void styleChanged(MarkerStyle);
	void styleChanged(int);
	void sizeChanged(int);
	void colorChanged(QColor);
	void backGroundChanged(bool);
	void bgColorChanged(QColor);
	void positionChanged(QPointF);
private:
	QString m_title;    //Надпись маркера
	MarkerStyle m_style;//Тип маркера
	int m_size;         //Размер маркера (диаметр)
	QColor m_color;     //Цвет маркера
	bool m_backGround;  //Заполнять внутри контура маркера определенным цветом
	QColor m_bgColor;   //Цвет заливки маркера
	QPointF m_position; //Позиция маркера
};
Вообще, в идеале хотелось бы добится того, чтобы в MFC-клиенте можно было сделать так:
m_pMyControll.GetMarker()->setSize(...);
Привожу код самого контролла, прошу не пинать за то, что это немного видоизмененный пример AxBouncer из примеров книги про Qt - "Qt4 программирование GUI на C++" Жасмин Бланшет)
class BInterface
{
public:
    virtual ~BInterface() {}
    virtual void setCurveData(int id) = 0;
};
QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(BInterface,
                    "com.Bouncer.BInterface/1.0")
QT_END_NAMESPACE
class AxBouncer : public QWidget, public QAxBindable, public BInterface
{
    Q_OBJECT
    Q_ENUMS(SpeedValue)
    Q_PROPERTY(QColor color READ color WRITE setColor)
    Q_PROPERTY(SpeedValue speed READ speed WRITE setSpeed)
    Q_PROPERTY(int radius READ radius WRITE setRadius)
    Q_PROPERTY(bool running READ isRunning)
		Q_INTERFACES(BInterface)
public:
    void setCurveData(int id);
    enum SpeedValue { Slow, Normal, Fast };
    AxBouncer(QWidget *parent = 0);
    void setSpeed(SpeedValue newSpeed);
    SpeedValue speed() const { return ballSpeed; }
		SpeedValue speed2() const { return ballSpeed; }
    void setRadius(int newRadius);
    int radius() const { return ballRadius; }
    void setColor(const QColor &newColor);
    QColor color() const { return ballColor; }
    bool isRunning() const { return myTimerId != 0; }
    QSize sizeHint() const;
    QAxAggregated *createAggregate();
public slots:
    void start();
    void stop();
    void stop3();
    void stop4(QRect);
    void setProp(MarkerProperty pr){prop = pr;}
    MarkerProperty getProp(){ return prop;}
signals:
    void bouncing();
protected:
    void paintEvent(QPaintEvent *event);
    void timerEvent(QTimerEvent *event);
private:
    int intervalInMilliseconds() const;
    QColor ballColor;
    SpeedValue ballSpeed;
    int ballRadius;
    int myTimerId;
    int x;
    int delta;
    MarkerProperty prop;
};
Вот кстати еще не понимаю, почему интерфейс stop3() и stop4(QRect) доступны из клиента, а метод setCurveData нет? Потому, что они объвлены в блоке public slots? и кстати для stop4 экспортируется класс QRect, правда без методов, а QColor почему-то нет.
main.cpp:
#include <QAxFactory>
#include "axbouncer.h"
QAXFACTORY_DEFAULT(AxBouncer,
                   "{5e2461aa-a3e8-4f7a-8b04-307459a4c08c}",
                   "{533af11f-4899-43de-8b7f-2ddf588d1015}",
                   "{772c14a5-a840-4023-b79d-19549ece0cd9}",
                   "{dbce1e56-70dd-4f74-85e0-95c65d86254d}",
                   "{3f3db5e0-78ff-4e35-8a5d-3d3b96c83e09}")
p.s. для проверки, вы можете взять пример из книги и изменить его как тут написано