“Il parametro non è corretto” l'errore quando si richiama assembly .NET tramite componente COM

StackOverflow https://stackoverflow.com/questions/2319632

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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top