Ποιό είναι ολόκληρο το error message? Που εμφανίζεται? Υποψιάζομαι ότι υπάρχει memory leak ή buffer overrun σε κάποιο function call και γι αυτό και έχεις αυτό το μήνυμα. Μπορεί να γεμίζεις κάποιο πίνακα με περισσότερα στοιχεία απ' όσα μπορεί να δεχθεί, να επιστρέφεις ένα string μεγαλύτερο από αυτό που έπρεπε, να θέτεις σε κάποια void* παράμετρο πίνακα αντί για int κλπ. Θα πρέπει να δεις ποιό είναι ολόκληρο το μήνυμα και που εμφανίζεται. Αν δεν έχεις βάλει exception handling στον κώδικα σου θα πρέπει να το κάνεις και να αποθηκεύεις κάπου τα μηνύματα λάθους μαζί με όσες περισσότερες πληροφορίες μπορείς. Αυτό θα πρέπει να το κάνεις και στον κώδικα C# και στον κώδικα C++ που έφτιαξες με το Qt.
Από εκεί και πέρα, το .NET έχει garbage collection ενώ τα ActiveX όχι. Υπάρχουν αυστηροί κανόνες για το ποιός δημιουργεί ένα αντικείμενο στη μνήμη (string, integer, οτιδήποτε) και ποιός το σβήνει. Σε περίπτωση που σβήσεις είτε άμεσα είτε έμμεσα ένα αντικείμενο το οποίο θα ξανασβήσει ο IE, θα έχεις παρόμοιο πρόβλημα. Μπορεί για παράδειγμα ο IE να σου δίνει ένα BSTR το οποίο εσύ χειρίζεσαι ως string. Επειδή όμως ο IE δημιούργησε το αντικείμενο περιμένει ότι αυτός θα πρέπει και να το σβήσει. Καθώς όμως εσύ το χειρίζεσαι ως string και αυτό διαγράφεται αυτόματα από τον garbage collector, θα πάρεις μήνυμα λάθους όταν προσπαθήσει ο ΙΕ να το ξανασβήσει.
Εφόσον ήδη προγραμματίζεις σε C++ πάντως ίσως θα ήταν ευκολότερο να φτιάξεις το ActiveX σε Managed C++ αντί για C# και να δουλέψεις με includes αντί για DllImport
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos