Слушай, я сталкиваюсь с проблемой, это начало вызывать у меня головную боль, потому что я смотрю и смотрю и все еще не удача.
Мне нужно выполнить метод DLL из C #, эта DLL была создана 4 года назад в VB 6.0 и зарегистрирована в COM. Он использует ADOB.Recordset в качестве возвращаемого типа метода, который я должен выполнить (исходный код отсутствует: S)
Я искал, как загрузить и выполнить эту DLL.
У меня были проблемы с первой загрузкой, я не мог загрузить его с помощью Server.CreateObject, Assembly.Load, Assembly.LoadFrom
, поэтому я попытался добавить его из ссылок COM и Visual Studio импортировал его в папку Bin с именем Interops. [Имя Dll]
Когда вы пытаетесь его использовать, выдает ошибку компиляции:
Error 1 No overload for method 'SelArregloCobertura' takes '6' arguments
Параметры верны, в пределах своего типа и всего. Довольно уверен в этом
Итак, я попытался выполнить его с помощью Reflection, это код:
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);
(я прокомментировал строку, которая дает мне ошибку компиляции)
И ошибка другая, разве это не ошибка компиляции, это дает мне ошибку в вопросе
Could not load type 'ADODB._Recordset_Deprecated' from assembly 'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
Когда я перехожу к метаданным dll, это выглядит так.
[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);
}
Так что я думаю, что есть проблема с шагом импорта,
У кого-нибудь есть идеи, как заставить это работать, или есть другая форма для загрузки метода выполнения из dll, который зарегистрирован в COM?
Любая помощь будет по-настоящему оценена.
Заранее спасибо.