Erzeugen lizensierter ActiveX Controls

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Wolfgang

Erzeugen lizensierter ActiveX Controls

Beitragvon Wolfgang » Dienstag 12. April 2005, 14:39

Hallo

Ich habe ein Problem mit dem Übergeben eines "runtime license keys" für ein ActiveX Control an die Methode CreateControl() der Klasse pywin.mfc.activex.Control.

Kann mir vielleicht jemand einen Tipp geben in welcher Form man den Lizenz Schlüssel für die Runtime License and diese Methode übergibt?

Ich habe den Lizenz Schlüssel für das gewünschte ActiveX Control mit Hilfe des "License Key Requester" Tools von Microsoft (http://support.microsoft.com/default.aspx?scid=kb;en-us;151771) ausgelesen und den String benutzt, der mir damit als Kommentar zusätzlich zu dem WCHAR Array angezeigt wird (in Python kann ich das WCHAR Array ja nicht direkt verwenden).

Diesen String übergebe ich als lic_string Parameter an die Methode CreateControl() in der folgenden Art:

Code: Alles auswählen

    # hier benutze ich anstatt X natürlich den richtigen key
    licKeyString = "XXXXXXXXX"
    self.ocx.CreateControl(
      windowTitle = "Component One Chart 8.0 ActiveX Control",
      style       = win32con.WS_VISIBLE | win32con.WS_CHILD,
      rect        = (0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT),
      parent      = self,
      id          = 1,
      lic_string  = licKeyString)

Wenn ich das ActiveX Control nun aber auf diese Weise mit dem richtigen Lizenz Schlüssel erzeuge, wird es trotzdem als "Evaluation Copy" gestartet und nicht in der lizensierten Version.

Ich habe mir daher mal die Methode CreateControl() der der Klasse pywin.mfc.activex.Control genauer angesehen und habe herausgefunden, dass sie den Lizenz String unverändert an die CreateControl() Methode der Klasse PyCWnd (der Python Wrapper für die CWnd Klasse der MFC) weitergibt. Ich habe mir dann die Implementierung von PyCWnd::CreateControl() in der entsprechenden Python Extension angesehen und festgestellt, dass dort das Makro T2OLE verwendet wird, um aus dem Python String für den Lizenz Schlüssel einen OLE String zu machen, bevor er an die eigentliche Methode CreateControl() der MFC weitergegeben wird.

Code: Alles auswählen

ok = pWnd->CreateControl(clsid, szWndName, style, rect, pWndParent, id, NULL, bStorage, T2OLE(szLicKey));

Ich bin mir nicht sicher, aber wenn ich es richtig gelesen habe, so verlangt die original CreateControl() Methode der MFC aber einen BSTR an dieser Stelle und ich habe irgendwo gelesen, dass T2OLE keinen BSTR erzeugt. Könnte das vielleicht der Grund sein, warum das ActiveX Control beim Erzeugen den übergebenen Lizenz Schlüssel ignoriert?

Hat irgendwer schonmal sowas ausprobiert und kann mir da weiterhelfen? Hat schonmal jemand versucht in Python (genauer in PythonWin/Win32 extension) ein ActiveX Control mit einer Runtime License zu erzeugen?

Danke im Voraus!

Gruß,
Wolfgang
Wolfgang

Problem lag in Pythonwin Implementierung!

Beitragvon Wolfgang » Montag 25. April 2005, 12:22

Hallo,

das oben beschriebene Problem hat sich zwischenzeitlich gelöst.

Die Win32 Extension für Python (Teil von Pythonwin) hatte zwei kleinere Bugs. Zusammen mit Mark Hammond (Pythonwin) habe ich zwei Fehler bei der Parameter-Übergabe an die original MFC-Funktion CreateControl() aus Python heraus gefunden. Einer lag im Python-Wrapper pywin.mfc.activex.Control, der andere lag in der eigentlichen Python-Extension im C++ Teil (win32win.cpp).

Mark Hammond hat die Bug Fixes übernommen und im nächsten Build von Pythonwin sollte es dann möglich sein, aus Python heraus ActiveX Control zu instanzieren, die eine Runtime License benötigen.

Scheinbar hat diesen Parameter bisher noch niemand benutzt, denn so wie er implementiert war, konnte er nie funktionieren.

OK, soviel zu Eurer Information. Wenn also jemand ein ähnliches Problem hatte, sollte er den nächsten Build von Pythonwin verwenden.

Gruß,
Wolfgang
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 25. April 2005, 12:50

Das wäre dann vermutlich pywin32 build 205, oder?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Wolfgang

Pywin32 Build 205 enthält die Bug Fixes

Beitragvon Wolfgang » Mittwoch 27. April 2005, 13:00

Hallo Leonidas

Ja, richtig, Pywin32 Build 205 müsste die Fixes enthalten.

Mark Hammond hat sie am 18. April in CVS eingecheckt, die Bugs sind also im Build 204 vom 12. April noch drin.

Gruß,
Wolfgang

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], snafu