LINUX.ORG.RU

ActiveQT: объект в event'е

 ,


0

1

Есть такой event:

    [ComVisible(true)]
    [Guid("f6d11eb0-65fd-4479-8b27-7ff213eaf0bb")]
    public interface IPaymentInfo
    {
        float getAmount();
        string getTransactionId();
        string getAuthCode();
    }

    [ComVisible(true)]
    [Guid("8ddacf28-abae-48d3-b44a-10f8e0505dbd")]
    [ClassInterface(ClassInterfaceType.None)]
    public class PaymentInfo : IPaymentInfo
    {
        private float amount;
        private string transactionId;
        private string authCode;

        public PaymentInfo(float amount, string transactionId, string authCode)
        {
            this.amount = amount;
            this.transactionId = transactionId;
            this.authCode = authCode;
        }

        public float getAmount()
        {
            return amount;
        }

        public string getTransactionId()
        {
            return transactionId;
        }

        public string getAuthCode()
        {
            return authCode;
        }
    }

    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [Guid("b4770f1f-f0c2-4a2d-9ebb-70298dbe6e37")]
    public interface IPaymentEvents
    {
        [DispId(201)]
        void onPurchaseSuccess(IPaymentInfo payment);
    }

    [ComVisible(false)]
    public delegate void PurchaseSuccessHandler(IPaymentInfo payment);

В Qt подключен так:

connect(payme, SIGNAL(onPurchaseSuccess(IPaymentInfo*)), this, SLOT(purchaseSuccess(IPaymentInfo*)));

Когда наступает событие onPurchaseSuccess, в консоль вылетает ошибка:

14.1.17 17:22:19 warning kernel\qobject.cpp:2275 err_method_notfound() QObject::receivers: No such signal onPurchaseSuccess(IDispatch*)

Код для работы с com-объектом сгенерирован с помощью dumpcpp. Примерно так он выглядит:


class PAYMESDKWRAPPER_EXPORT IPaymentInfo : public QAxObject
{
public:
    IPaymentInfo(IDispatch *subobject = 0, QAxObject *parent = 0)
    : QAxObject((IUnknown*)subobject, parent)
    {
        internalRelease();
    }

    /*
    Method getAmount
    */
    inline double getAmount();

    /*
    Method getAuthCode
    */
    inline QString getAuthCode();

    /*
    Method getTransactionId
    */
    inline QString getTransactionId();

// meta object functions
    static const QMetaObject staticMetaObject;
    virtual const QMetaObject *metaObject() const { return &staticMetaObject; }
    virtual void *qt_metacast(const char *);
};

Как это можно исправить?

Другие события (без передачи объектов в аргументах) работают нормально.

★★

И ещё вопрос сюда же: очень бы хотелось заменить class PaymentInfo на struct PaymentInfo. Но проблема в том, что dumpcpp его «не видит». Т.е. создает объявление структуры PaymentInfo и на этом всё.

SaBo ★★ ()
Ответ на: комментарий от arcanis

Это же wrapper на C++?

P.S. Если речь идет об этом:

class Worker;

// .NET class
public __gc class netWorker
{
public:
    netWorker();
    ~netWorker();

    __property String *get_StatusString();
    __property void set_StatusString(String *string);

    __event void statusStringChanged(String *args);

private:
    Worker *workerObject;
};
SaBo ★★ ()

На винфак.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.