Frage

Ich habe eine .NET-Assembly, dass Leben im GAC. Es registriert ist richtig so, dass sie von COM-Komponenten aufgerufen werden können. Diese .NET enthält Anordnung, ein Verfahren und eine Überlastung der Methode:

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);
}

Jetzt kann ich FoxPro verwenden diese Versammlung aufzurufen:

o = CREATEOBJECT("FooNamespace.FooClass")   
sValString = "blah"
sOutString = "blahblah"
o.Foo(sValString, @sOutString, "") *OK!
o.Foo(sValString, @sOutString)     *Generates error

Aufruf der drei Parameter Version funktioniert ok, aber die beiden Parameter Version gibt den folgenden Fehler, wenn sie von der COM-Komponente aufgerufen:

OLE error code 0x80070057: The parameter is incorrect.

Irgendwelche Ideen ?? Vielen Dank!

War es hilfreich?

Lösung

COM hat keine Unterstützung bei allen für Verfahren Überlastungen. Ihre zweite Foo () Funktion wird umbenannt, wenn Regasm.exe die Typbibliothek erzeugt. Sie können das Oleview.exe Tool verwenden, um einen Blick auf mich zu nehmen, wenn Foxpro kann Ihnen nicht sagen, welcher Name verwendet wurde.

Das Beste, was zu tun ist, um das Problem vollständig zu vermeiden und einfach der Überlastung eines anderen Namen geben, so dass Sie müssen es nicht erraten.

Andere Tipps

Warum verlassen so schnell.

using System.Runtime.InteropServices;
...
public void Foo(string sValString, out string sOutString, [Optional] string sOverloadString)

Und das ist keine C # 4.0-Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top