2010-09-28 21 views
1

J'utilise le contrôle de capture vidéo LeadTools Multimedia, qui apparaît sous le type AxltmmCaptureCtrl. Dans mon code, j'ai la ligne suivante:La propriété Control est acceptée par le compilateur, provoque une erreur d'exécution "n'existe pas" dans UserControl - mais fonctionne correctement à l'exécution

AxltmmCaptureCtrl1.VideoWindowSizeMode = LTMMLib.ltmmSizeMode.ltmmFit; 

qui compile très bien, sans plaintes ou même les avertissements du compilateur. Mais quand j'utilise la chose à l'exécution, j'obtiens l'erreur suivante:

Method not found: 'Void AxLTMMLib.AxltmmCaptureCtrl.set_VideoWindowSizeMode(LTMMLib.ltmmSizeMode)'. 

WTF ?! Intellisense reprend la méthode, et le compilateur lui convient parfaitement - mais dans runtime il décide soudainement que la méthode n'existe pas?

Il existe d'autres propriétés (pas toutes) présentant un comportement similaire. Cela ne semble pas discriminer les setters et les getters.

Des idées?

EDIT: ... plus curieux, il semble que le problème ne se produit que dans l'exécution d'un UserControl, à savoir en mode conception. J'ai mis ce contrôle LeadTools dans mon propre UserControl, et quand je mets ce contrôle sur un autre formulaire, j'obtiens cette erreur "Method not found". Mais quand c'est en runtime ("real" runtime, c'est-à-dire, pas runtime UserControl), le code fonctionne parfaitement! Comme c'est bizarre?

+0

Comment êtes-vous sûr qu'il utilise la même DLL sous-jacente dans ces deux cas? COM peut être très particulier quand il s'agit de résolution dll. Surtout si vous déployez la DLL dans votre application mais que celle-ci (ou une * version * différente) est également enregistrée localement. –

+0

@Marc - il ne m'est même pas venu à l'esprit que cela pouvait faire référence à 2 DLL différentes. Comment pourrais-je vérifier cela? –

+0

pour être honnête, je suis rouillé; Je n'ai pas beaucoup touché COM depuis des années - je ne peux pas donner une réponse décente à cela. –

Répondre

1

Vous compilez sur un assembly d'interopérabilité - un assembly géré/.NET conçu pour imiter l'API COM sous-jacente. Le problème le plus probable ici est le versionnement; cette propriété est peut-être présente dans l'assembly PIA managé, mais manquante dans la version COM que vous possédez.

+0

Cela ressemble à une explication raisonnable, merci. Maintenant, comment puis-je compiler un nouvel assembly Interop qui correspond à l'API COM? –

+0

Vous pouvez utiliser tlbimp (http://msdn.microsoft.com/en-us/library/tt0cf3sx(v=vs.80).aspx) pour créer interops. tlbimp fait partie de l'installation de Visual Studio. – Polyfun

+0

S'il vous plaît voir mon édition - l'erreur se produit uniquement dans l'exécution de UserControl, pas "vrai" runtime! –