Código: Selecionar todos
Type COM;
object COMObj;
object ReturnObj = null;
object erro = new object();
string Nome = "Fulano";
string Senha = "12354";
// obtém a referência do objeto COM
COM = Type.GetTypeFromProgID("COM.Autenticao");
// instancia o objeto COM
COMObj = Activator.CreateInstance(COM);
// array de parametros
object[] args = new object[3];
// os parametros
args[0] = erro;
args[1] = Nome;
args[2] = Senha;
// invoca o método
ReturnObj = COM.InvokeMember(
"Autenticar",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.InvokeMethod,
null,
COMObj,
args);
return ReturnObj;
Código: Selecionar todos
Type COM;
object COMObj;
object ReturnObj = null;
object erro = new object();
string Nome = "Fulano";
string Senha = "12354";
// obtém a referência do objeto COM
COM = Type.GetTypeFromProgID("COM.clsAutenticao");
// instancia o objeto COM
COMObj = Activator.CreateInstance(COM);
// array de parametros
object[] args = new object[3];
// modificador dos parâmetros para passá-los por referência
ParameterModifier modifiers = new ParameterModifier(3);
// os parametros
args[0] = erro;
args[1] = Nome;
args[2] = Senha;
// define os modificadores
modifiers[0] = true;
modifiers[1] = false;
modifiers[2] = false;
// cria o Array de parameter Modifiers (requerido para o InvokeMember)
ParameterModifier[] modifierArray = { modifiers };
// invoca o método
ReturnObj = COM.InvokeMember(
"Autenticar",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.InvokeMethod,
null,
COMObj,
args,
modifierArray,
null,
null);
return ReturnObj;
System.Reflection.TargetInvocationException, "Object doesn't support this property or method".
Estranhamente, o problema ocorre porque a variável que é passada por referência não pode conter um valor quando pasada para a função. Para resolver o problema, basta mudar a declaração da variável erro para:
Código: Selecionar todos
// de
object erro = new object();
// para
object erro = null;
Código: Selecionar todos
// atualiza o parametro erro
erro = args[0];
Código: Selecionar todos
Type COM;
object COMObj;
object ReturnObj = null;
// obtém a referência do objeto COM
COM = Type.GetTypeFromProgID("COM.clsAutenticao");
// instancia o objeto COM
COMObj = Activator.CreateInstance(COM);
// array de parametros
object[] args = new object[3];
// modificador dos parâmetros para passá-los por referência
ParameterModifier modifiers = new ParameterModifier(3);
// os parametros
args[0] = erro;
args[1] = Nome;
args[2] = Senha;
// define os modificadores
modifiers[0] = true;
modifiers[1] = false;
modifiers[2] = false;
// cria o Array de parameter Modifiers (requerido para o InvokeMember)
ParameterModifier[] modifierArray = { modifiers };
// invoca o método
ReturnObj = COM.InvokeMember(
"Autenticar",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Instance | BindingFlags.InvokeMethod,
null,
COMObj,
args,
modifierArray,
null,
null);
// atualiza o parametro erro
erro = args[0];
return ReturnObj;