“Il parametro non è corretto” l'errore quando si richiama assembly .NET tramite componente COM
-
22-09-2019 - |
Domanda
Ho un assembly .NET che vive nel GAC. Si è registrato correttamente in modo che possa essere invocato dai componenti COM. Questo assieme NET contiene un metodo ed un sovraccarico al metodo:
public void Foo(string sValString, out string sOutString, string sOverloadString)
{
if( sOverloadString == string.Empty )
// do something
else
// do something else
}
public void Foo(string sValString, out string sOutString)
{
Foo(sValString, out sOutString, string.Empty);
}
Ora, posso utilizzare FoxPro per richiamare questa assemblea:
o = CREATEOBJECT("FooNamespace.FooClass")
sValString = "blah"
sOutString = "blahblah"
o.Foo(sValString, @sOutString, "") *OK!
o.Foo(sValString, @sOutString) *Generates error
Invocare la versione del parametro a tre funziona bene, ma le due versioni parametro fornisce il seguente errore quando viene richiamato dal componente COM:
OLE error code 0x80070057: The parameter is incorrect.
Tutte le idee ?? Grazie!
Soluzione
COM non ha il supporto a tutti per il metodo sovraccarichi. La vostra seconda funzione Foo () verrà rinominato quando Regasm.exe genera la libreria dei tipi. È possibile utilizzare lo strumento Oleview.exe per dare un'occhiata a se FoxPro non può dire quale nome è stato utilizzato.
La cosa migliore da fare è di evitare completamente il problema e semplicemente dare il sovraccarico di un altro nome in modo da non dover indovinare a questo.
Altri suggerimenti
Perché smettere così veloce.
using System.Runtime.InteropServices;
...
public void Foo(string sValString, out string sOutString, [Optional] string sOverloadString)
E questa non è una funzione C # 4.0.