2016-04-05 41 views
1

parametresi ile bağlanıyorum Bir idl dosyasında olduğu gibi IDispatch * tipinde bir parametresi olan bir ActiveX olayını işlemek için ActiveQt kütüphanesini kullanmaya çalışıyorum.QAxObject olayına bir IDispatch *

// ... 
library RecognitionClientLib 
{ 
    importlib("stdole2.tlb"); 
    [ 
     uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), 
     helpstring("_IIFactoryEvents Interface") 
    ] 
    dispinterface _IIRecognizerFactoryEvents 
    { 
     properties: 
     methods: 
      [id(1), helpstring("method OnError")] void OnError(
       [in] LONG ilOperationCode, 
       [in] BSTR iszDescription 
       ); 
      [id(2), helpstring("method OnResult")] void OnResult(
       [in] IDispatch* ilpSource, 
       [in] LONG ilOperationCode 
       ); 
    }; 
    [ 
     uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), 
     control, 
     helpstring("IFactory Class") 
    ] 
// ... 

Dumpcpp.exe'yi kullandım ve nesne için bir üstbilgi dosyası ve bir cpp dosyası oluşturdum. başlık dosyasında gösterildiği gibi oluşturulan dosya olay nesil atlanan:

// skipping event interface _IIFactoryEvents 

belgeye göre, Idispatch * bağımsız değişkeni "QAxBase :: asVariant()" dönüştürülmelidir. Dolayısıyla aşağıdaki gibi olayları arasında bağlantı kurmaya çalıştılar: Ben OnError sinyal ama OnResult bağlanmasını bağlanmak sorun

ClientLib::IFactory* lpFactory(new ClientLib::IFactory()); 
bool lbOk(connect(
    lpFactory, 
    SIGNAL(OnError(
     int, 
     const QString& 
     )), 
    SLOT(onError(
      int, 
      const QString& 
     )) 
    )); 
assert(lbOk); 
lbOk = connect(
    lpFactory, 
    SIGNAL(OnResult(
     QVariant, 
     int 
     )), 
    SLOT(onResult(
     QVariant, 
     int 
     )) 
    ); 
assert(lbOk); 

Nesne ile başarısız oldu :: bağlamak: Böyle sinyal ClientLib :: IFactory :: OnResult (QAxObject *, int)

IDispatch * türü bağımsız değişkenleri için hangi parametre türünü kullanmalıyım?

Çok teşekkürler!

+0

Nitpick: const başvuruları, bağlandığınız sinyalin yanı sıra, boşluk olarak da atılan sinyal/yuva imzalarından kaldırılmalıdır. Bu, Qt'nin imzaları normalize etmek zorunda kalmaması nedeniyle biraz çalışma süresi kazandırır. Böylece bool lbOk = connect (lpFactory, SIGNAL (OnError (int, QString)), SLOT (onError (int, QString))); '. –

+0

Tavsiye için teşekkürler. Onları değiştireceğim. :) – crackpot

cevap

1

Lütfen IDispatch * türünün bir bağımsız değişkeninde için hangi parametre türünü kullanmalıyım? QAxObject* için

IDispatch* haritalar: http://doc.qt.io/qt-5/qaxbase.html

+0

Ayrıntılı cevabınız için teşekkürler. Ancak sorum, sinyalin imzasının ne kullanması gerektiğiydi. Yukarıdaki cevabın cevabını yine de çözemiyorum. :( Ben kazandım ve argümanın "IDispatch *" türünde olması gerektiğine karar verdim.Onlar geçiyor ... Teşekkürler – crackpot

1

Ben belge bunun için QAxBase :: asVariant() olduğunu söyleyen rağmen parametre tipi değişiklik yapılmadan Idispatch *olmalıdır öğrendim Çeşidi parametresinde IDispatch *.

+0

İyi bitti: Qt'ye bir dokümantasyon hatası olarak gönderebilirseniz harika olur. bugtracker. –