ActiveX erzeugt doppelte Funktion?
-
Hallo,
ich verwende ein Media Player Plugin und dieses erzeugt eine Datei wmp.thl
Der Compiler meldet eine doppelt declarierte Funktion darin.
Diese Datei wird anscheinend automatisch generiert.// // Wrapper methods for error-handling // _bstr_t GetCurrentState ( ); _bstr_t GetCurrentState ( ); HRESULT SetCurrentState ( _bstr_t NewState ); HRESULT SetOn ( ); HRESULT SetOff ( );Es wird zweimal GetCurrentState erzeugt.
Meine Fragen: Was ist eine thl Datei?
Wie bekommt man ein solches Fehlverhalten wieder weg?Grüße
TheNoName
-
Die tlh wird durch ein #import statement erzeugt. IMHO ist der Fehler in der tlb Datei zu suchen, die Du verwendest.
Schau die mal mit dem OleViewer an.Was für einen COmpiler benutzt Du?
-
Hi,
die tlb sagt mir jetzt leider auch wenig.
Seit ich von XP auf Vista umgestiegen bin habe ich die neuen MediaPlayer
ActiveX Elemente in Windows die diese Dateien jedesmal neu erstellen.
Mit einem XP Rechner funktioniert das kompilieren tadellos.
Evtl. ist da irgendwo was Altes?Compiler von VS2005 Standard.
Gruesse
TheNoName
-
Also der Grund sheint auch in der tlh woanderst begraben zu sein:
__declspec(implementation_key(1300)) _bstr_t IUPnPService_IWMPUPnPBinaryControlDual::GetCurrentState ( ); __declspec(implementation_key(1301)) _bstr_t IUPnPService_IWMPUPnPBinaryControlDual::GetCurrentState ( );Damit muss er zweimal dieselbe Funktion erstellen, denk ich mir.
Es gibt noch eine tli mit:// // interface IUPnPService_IWMPUPnPBinaryControlDual wrapper method implementations // #pragma implementation_key(1300) inline _bstr_t IUPnPService_IWMPUPnPBinaryControlDual::GetCurrentState ( ) { BSTR _result = 0; HRESULT _hr = get_CurrentState(&_result); if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this)); return _bstr_t(_result, false); } #pragma implementation_key(1301) inline _bstr_t IUPnPService_IWMPUPnPBinaryControlDual::GetCurrentState ( ) { BSTR _result = 0; HRESULT _hr = raw_GetCurrentState(&_result); if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this)); return _bstr_t(_result, false); }
-
Guck dir mal das "originale" IDL mit dem "OLE View" an.
(Die tlh/tli wurden ja bereits vom VC verbastelt)EDIT: Blödsinn. "raw_..." vs. "get_..." übersehen.
Probier mal mit#import "lala.tlb" raw_method_prefix("raw_")
-
Hi,
verstehe ich nicht ganz.
Beide Dateien kann ich löschen und er erzeugt sie eh neu.
Die tlb ist nicht Bestandteil meines Projektes.
Der Oleview zeigt nur ein mal GetCurrentState. Lustigerweise sind dort an anderen Stellen doppelte Funktionsnamen, solange die nicht angemeckert werden sind sie mir aber mal egal.Wo kommt der import hin?
In jeden Header der ActiveX Komponente?
In den Ableitungen steht:#import "C:\\WINDOWS\\system32\\wmp.dll" no_namespaceIst es möglich, das durch das erneute Einsetzen der ActiveX Componenten in den MFC Form Editor der Fehler verschwindet?
Ich verwende übrigends folgende Einzelinterfaces:
CWMPControls3.h
CWMPMedia.h
CWMPMedia3.h
CWMPPlayer4.h
CWMPSettings2.hUPNP wird nicht verwendet

-
Ich habe jetzt die tlh und tli schreibgeschützt.
Der doppelte Aufruf ist ausdokumentiert.
Die drei imports habe ich gelöscht damit diese Dateien nicht mehr erzeugt werden.Nun kompiliert er durch, gibt es da Sideeffekts?
-
Schau mal bei den Optionen zu #import nach was es da alles gibt. Dann sorg dafür das der Import MIT namespace erfolgt. Und entscheide dich außerdem ob du RAW-Functions ODER Wrapper-Functions verwenden willst.
-
Nun kompiliert er durch, gibt es da Sideeffekts?
Nein, kannste so lassen.
Wäre aber vermutlich mit ein paar zusätzlichen Parametern für #import auch gegangen.