2011-07-27 3 views
2

Regardez, je suis confronté à un problème, il a commencé à me donner un mal de tête parce que je regarde et regarde et toujours pas de chance.Impossible de charger le type 'ADODB._Recordset_Deprecated' à partir de l'assembly 'ADODB, Version = 7.0.3300.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a'

Je dois exécuter une méthode d'une DLL à partir de C#, cette DLL a été créée il y a 4 ans dans VB 6.0 et elle est enregistrée dans COM. Il utilise ADOB.Recordset comme type de retour de la méthode que je dois exécuter (pas de code source avaialble: S)

J'ai cherché comment charger et exécuter cette DLL. J'ai eu des problèmes en le chargeant d'abord, je ne pouvais pas le charger avec Server.CreateObject, Assembly.Load, Assembly.LoadFrom alors j'ai essayé de l'ajouter à partir des références du COM et du Studio visuel. Je l'ai importé dans le dossier Bin avec le nom Interops. ]

Lorsque y essayez de l'utiliser, il me donne erreur de compilation, il dit:

Error 1 No overload for method 'SelArregloCobertura' takes '6' arguments 

Les paramètres sont corrects, dans son type et tout. À peu près sûr de ce

donc j'ai essayé de l'exécuter avec Reflection c'est le code:

ADODB.Recordset rs = new ADODB.Recordset();  
     string strRamo = "70"; 
     string strSubramo = "01"; 
     string strOficina = "070"; 
     int iClaveSolicitud = 7118; 
     string strModulo = "0"; 
     int iInciso = 1; 

     Poliza.clsdNTCoberturaClass oClass = new Poliza.clsdNTCoberturaClass(); 

     MethodInfo miSelArregloCobertura = oClass.GetType().GetMethod("SelArregloCobertura"); 
     miSelArregloCobertura.Invoke(oClass, new object[] { "70", "01", "070", 7118, "0", 1 }); 
     //oClass.SelArregloCobertura(strRamo, strSubramo, strOficina, iClaveSolicitud, strModulo, iInciso); 

(je l'ai commenté la ligne qui me donne l'erreur de compilation) Et l'erreur est différente, ne qui compilent erreur, il me donne l'erreur dans la question

Could not load type 'ADODB._Recordset_Deprecated' from assembly 'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. 

Quand je vais aux métadonnées de la dll il semble que cela.

[Guid("757AC98D-3800-406F-BA47-AEDAF2EBBCDB")] 
    [TypeLibType(2)] 
    [ClassInterface(0)] 
    public class clsdNTCoberturaClass : _clsdNTCobertura, clsdNTCobertura 
    { 
     public clsdNTCoberturaClass(); 

     [DispId(1610809344)] 
     public virtual ADODB._Recordset_Deprecated SelArregloARenovar(string dFecha1, string dFecha2, string strNumOfic, short strCveAge, string strRamo); 
     [DispId(1610809347)] 
     public virtual ADODB._Recordset_Deprecated SelArregloCobertura(string strRamo, string strSubRamo, string strNumOfic, int lCveSol, string strModulSol, int lCveInc); 
     [DispId(1610809348)] 
     public virtual ADODB._Recordset_Deprecated SelArregloCobEst(string strRamo, string strSubRamo, short intCveInc, short intAnio, int lNumRec, string strOficRecl); 
     [DispId(1610809349)] 
     public virtual ADODB._Recordset_Deprecated SelArregloCobEstim(string strRamo, string strSubRamo, short intCveInc, short intAnio, int lNumRec, string strOficRecl); 
     [DispId(1610809346)] 
     public virtual ADODB._Recordset_Deprecated SelArregloNvaCobertura(string strRamo, string strSubRamo, string strNumOfic, int lCveSol, string strModulSol, int lCveInc, short intAnio, string strOficRecl, string intnumrec); 
     [DispId(1610809345)] 
     public virtual ADODB._Recordset_Deprecated SelCobertura(string strRamo, string strSubRamo, string strCveCober); 
     [DispId(1610809350)] 
     public virtual ADODB._Recordset_Deprecated SelEstCobertura(string strRamo, string strSubRamo, short intAnio, string strOficRecl, int lNumRec, short intCveInc, string strCveCober); 
    } 

Je pense qu'il ya un problème avec l'étape d'importation,

Quelqu'un a une idée de comment faire cela fonctionne, ou une autre forme de chargement exécuter une méthode à partir d'une dll qui est inscrit en COM?

Toute aide serait vraiment appréciée.

Merci d'avance.

Répondre

4

Vérifier Breaking change in MDAC ADODB COM components in Windows 7 Service Pack 1

Attention: ceci est un post looooooooong, votre navigateur accrocher pendant un certain temps.

Mise à jour: Microsoft a décidé de revenir la bibliothèque de type et essaimer les nouvelles interfaces, voir Windows 8 Developer Preview build contains the complete fix of the ADO typelib issue

+0

Merci pour la réponse, je vais vérifier comme accepté, mais comme il semble qu'il n'y a pas de solution à ce problème, je devais re faire le dll en C# code pour que cela fonctionne. Merci de votre aide. –

+0

Microsoft vient de publier une solution, espérons que celle-ci a le moins d'impact pour les développeurs et leurs clients. –

+0

merci j'ai vu le poste, et bien ils au moins l'ont réparé dans Windows 8, laisse attendre si je reçois un autre projet avec VB 6.0 xD merci pour la réponse! J'ai vu votre message comme 8 heures après que le post a été publié par Microsoft juste oublié de vous remercier! xD merci! –

2

Microsoft Connect a une page sur ce sujet, y compris quelques informations solution. Il s'agit de briser les changements apportés à ADODB dans Windows 7 SP1.

L'une des solutions de contournement est détaillée à cette Microsoft Support Page.

Questions connexes