„Parameter falsch“ Fehler beim .NET-Assembly über COM-Komponente aufrufen
-
22-09-2019 - |
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!
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.