Seite 1 von 1
COM Frage (IRTDServer)
Verfasst: Sonntag 7. August 2005, 12:46
von weismat
Hi.
Ich möchte gerne einen COM Server erstellen, der das IRTDServer Interface implementiert (Excel-Realtimedateninterface). Näheres dazu findet sich unter
http://support.microsoft.com/?id=327215.
Probleme habe ich vor allem mit folgender Funktion:
Code: Alles auswählen
STDMETHODIMP ServerStart(IRTDUpdateEvent *CallbackObject, long *pfRes)
Wie schaffe ich es, daß der Pointer auf ein long im Interface auf einen Wert von 1 zeigt? Oder muss ich einen Wrapper aus irgendwelchen C-Headern erzeugen?
Re: COM Frage (IRTDServer)
Verfasst: Sonntag 7. August 2005, 14:51
von Joghurt
weismat hat geschrieben:Wie schaffe ich es, daß der Pointer auf ein long im Interface auf einen Wert von 1 zeigt? Oder muss ich einen Wrapper aus irgendwelchen C-Headern erzeugen?
sollte gehen. Bar liegt allerdings auf dem Stack. Wenn das Probleme geben sollte, besser
(static bar=1 geht nicht, da es nur einmal initialisiert würde; und bei MS wäre ich mir nicht so sicher, dass der übergebene Pointerwert nie verändert wird)
Re: COM Frage (IRTDServer)
Verfasst: Sonntag 7. August 2005, 17:51
von Gast
Joghurt hat geschrieben:weismat hat geschrieben:Wie schaffe ich es, daß der Pointer auf ein long im Interface auf einen Wert von 1 zeigt? Oder muss ich einen Wrapper aus irgendwelchen C-Headern erzeugen?
sollte gehen. Bar liegt allerdings auf dem Stack. Wenn das Probleme geben sollte, besser
(static bar=1 geht nicht, da es nur einmal initialisiert würde; und bei MS wäre ich mir nicht so sicher, dass der übergebene Pointerwert nie verändert wird)
Ich implementiere einen Server entsprechend einem C++ Interface, daß von Excel aus innerhalb einer Formel aufgerufen wird.
Ich muss dahre die Funktion, die ich angegeben habe, implementieren und nicht aufrufen.
Ich poste mal einen Teil von meinem Code:
Code: Alles auswählen
"""A COM Server based on perfom example
"""
from win32com.server import exception, register
import pythoncom, win32pdhutil, winerror
class OrcRtd:
_reg_verprogid_ = "Python.Rtd.1"
_reg_progid_ = "Python.Rtd"
_reg_desc_ = RTD Interface"
_reg_clsid_ = "{64cef7a0-8ece-11d1-a65a-00aa00125a98}"
_reg_class_spec_ = "win32com.servers.Rtd"
_public_methods_ = ['ServerStart','ServerTerminate', 'ConnectData',
'DisconnectData', 'Heartbeat', 'RefreshData']
def ServerStart(CallbackObject, pfRes):
#ServerStart(IRTDUpdateEvent *CallbackObject, long *pfRes)
print "Server Start"
pfRes=1
#hier muesste ich den uebergebenen Pointer verwalten
return 0;
if __name__=='__main__':
print "Registering COM server..."
register.UseCommandLine(OrcRtd)
Wie setzte ich nun pfRes auf den richtigen Wert? Wie kann ich Pointer auf Strukturen auspacken (Bsp. CallbackObject)?