Wahrscheinlich finden Sie eine Assertion in winocc.cpp in Zeile 345. Schauen Sie sich die Quelldatei an, um zu sehen, worauf sie prüft (was Sie nicht tun sollten), und hören Sie dann auf, es zu tun :-)
Wenn Sie den Quellcode nicht haben, dann müssen Sie ihn auch nicht haben:
- sich mit dem Verfasser in Verbindung zu setzen und herauszufinden, wie die Behauptung lautet; oder
- Lesen Sie die API-Dokumente, um zu sehen, ob Sie etwas falsch machen.
Eine Behauptung ist eine Laufzeit Prüfung, mit der der Programmierer sicherstellt, dass die Regeln eingehalten oder unerwartete Situationen abgefangen werden, bevor ein wirklicher Schaden entsteht. Dinge wie eine doppelt verknüpfte Liste, die beschädigt wird (z.B. etwas wie assert (x->next->prev != x), das ein Problem feststellt, wenn der vorherige Knoten von Knoten A keinen Knoten A als nächsten Knoten hat).
Etwa so:
Assert (p1 == NULL);
(in meiner mythischen Sprache, für den Fall, dass ich die C-Syntax falsch habe) am Anfang einer Funktion wird eine Behauptung auslösen, wenn p1 gleich NULL ist.
Eine Websuche ergibt in Zeile 345 folgendes (siehe aquí ) :
ASSERT(m_pCtrlSite != NULL); // kein OLE-Steuerelement (zumindest noch nicht).
und es scheint ein Problem mit der Tatsache zu sein, dass Sie versuchen, ein lizenziertes ActiveX-Steuerelement dynamisch zu erstellen. Dieser Link enthält auch die KB-Nummer Q151804, die besagt, dass das Problem von MS entwickelt wurde (was bedeutet, dass MS es wahrscheinlich nicht behoben hat) - Sie müssen das Steuerelement mit einer gültigen Lizenzzeichenfolge erstellen.
Ein weiterer Kommentar, den ich gefunden habe, besagt:
Es reicht nicht aus, nur eine Instanz des ActiveX-Steuerelements zu erstellen. Ein ActiveX-Steuerelement muss ordnungsgemäß gehostet werden, bevor es verwendet werden kann. Das ist bei Ihnen nicht der Fall. Sie müssen es z. B. in ein Dialogfeld einfügen und eine Instanz dieses Dialogfelds erstellen.
Ohne den Rest Ihres Codes zu sehen, ist es schwer zu sagen, ob dies Ihr spezielles Problem ist, aber wenn su Zeile 345 ist diejenige, die ich denke, dass es ist, das macht Sinn - es beschwert sich, dass die Steuerseite NULL ist (d.h., das Steuerelement ist nicht gehostet).
Ein letzter Punkt, auf den Sie achten sollten:
Wenn Ihr ActiveX-Steuerelement est in einem Dialog, versuchen Sie, etwas mit dem Steuerelement zu tun vor rufen Sie die Dialogfunktion DoModal()
?
Das Steuerelement wird erst initialisiert, nachdem Sie die DoModal()
Sie können also erst dann mit der Steuerung spielen, wenn dies geschehen ist. Sie sollten dies in den Dialogen tun OnInitDialog()
- zu diesem Zeitpunkt sollte das Steuerelement vollständig initialisiert sein und Sie können damit tun, was Sie wollen.
Wenn Sie versuchen, Parameter aus dem Konstruktor des Dialogs zu verwenden, um das Steuerelement zu manipulieren, müssen Sie sie irgendwo in der Dialog und übertragen sie auf die Steuerung in OnInitDialog()
.
Diese Informationen wurden hauptsächlich von folgenden Personen gesammelt aquí .