خطأ "المعلمة غير صحيح" عند استدعاء تجميع .NET عبر مكون COM

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

سؤال

لدي مجموعة .NET التي تعيش في GAC. يتم تسجيله بشكل صحيح بحيث يمكن استدعاؤه بواسطة مكونات COM. تحتوي مجموعة .NET هذه على طريقة وحمل زائد على الطريقة:

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

الآن ، يمكنني استخدام Foxpro لاستدعاء هذه التجميع:

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

يعمل استدعاء إصدار المعلمة الثلاثة بشكل جيد ، لكن إصدار المعلمة يعطيان الخطأ التالي عند الاحتجاج به بواسطة مكون COM:

OLE error code 0x80070057: The parameter is incorrect.

أيه أفكار؟؟ شكرًا لك!

هل كانت مفيدة؟

المحلول

لا يتمتع com بأي دعم على الإطلاق من أجل التحميل الزائد للأسلوب. سيتم إعادة تسمية وظيفة FOO () الثانية عندما تقوم Regasm.exe بإنشاء مكتبة النوع. يمكنك استخدام أداة Oleview.exe لإلقاء نظرة عليها إذا لم يتمكن Foxpro من إخبارك بالاسم المستخدم.

أفضل شيء القيام به هو تجنب المشكلة تمامًا وإعطاء الحمل الزائد اسمًا آخر حتى لا تضطر إلى تخمينها.

نصائح أخرى

لماذا استقال بهذه السرعة.

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

وهذه ليست ميزة C# 4.0.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top