ประเภทการส่งคืนทั่วไปของ Marshal สำหรับ com interop

เป็นไปได้ไหมที่ Marshal จะเป็นประเภทส่งคืนทั่วไปซึ่งไม่ใช่แบบทั่วไปสำหรับ COM interop

สมมติว่าฉันมีคลาสต่อไปนี้:

[ComVisible(true)]
public class Foo
{
    public IEnumerable<string> GetStr() // Generic return type
    {
        yield break;
    }
}

ฉันรู้ว่า IEnumerable‹string› ใช้งาน IEnumerable

ฉันสามารถบังคับ tlbexp.exe (ผ่านทาง return: คุณลักษณะหรือวิธีอื่น) เพื่อเปิดเผยวิธีการ GetStr() เป็นวิธีการส่งคืน IEnumerable ได้หรือไม่


person ichen    schedule 08.04.2010    source แหล่งที่มา


คำตอบ (1)


ฉันไม่คิดว่าเป็นไปได้ไม่มี เมื่อคุณถึงขีดจำกัดด้วย COM interop marshaling โดยปกติแล้ว จะดีกว่าถ้าสร้างประเภท wrapper แยกต่างหากด้วยอินเทอร์เฟซที่เป็นมิตรกับ COM และปล่อยให้ประเภทดั้งเดิมเป็นแบบ .NET ที่เป็นมิตรที่สุด

person Mattias S    schedule 08.04.2010
comment
โอเค แต่ทำยังไงล่ะ?!? - person CoderDennis; 18.05.2011
comment
@CoderDennis: เพิ่มวิธีการ wrapper ด้วยค่าส่งคืนที่ไม่ใช่แบบทั่วไป เช่น public IEnumerable GetStrInterop() { return GetStr(); } และใช้วิธีนี้สำหรับการทำงานร่วมกัน - person Heinzi; 03.04.2013