Есть такой 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 *);
};
Как это можно исправить?
Другие события (без передачи объектов в аргументах) работают нормально.