2009-08-14 8 views
0

일반 형식을 COM과 함께 직접 사용할 수없는 것으로 보입니다. MSDN의 Interoperating Using Generic Types을 참조하십시오.일반 형식을 사용하는 COM Interop

누구에게 어떻게 달성 할 수 있습니까?

+0

자세히 설명해 주시겠습니까? 어떻게 할 수 있는지 물어 보면 끝나지 않습니다. 특정 시나리오가 있습니까? –

+0

참조 된 문서에는 'directlty'가 나와 있으므로 '간접적으로'사용할 수있는 방법이 있다고 가정합니다. 구체적인 예는 다음과 같습니다. http://stackoverflow.com/questions/1200576/find-all-controls-on-msform-from-c – jedd

+0

VB.NET은 더 많은 정보를 추가하기 위해 refredced 코드가 작동하는 것처럼 '간접적 인'것. Controls 컬렉션에서 잘못 입력하면 다음 오류가 발생합니다. System.MisingMemberException 'Microsoft.VisualBasic.dll에서 발생했습니다. 그래서 C#에서 실행되는 코드를 얻으려면 무엇이 있는지 알아야합니다. – jedd

답변

4

제 생각에는 일반 유형을 ComVisible으로 직접 표시 할 수는 없지만 해당 유형은 ComVisible이 아닌 일반 인터페이스를 구현할 수 있다고 생각합니다. 나는이 기사에 대해 얘기하고있는 "간접적으로"를 가정하자

[ComVisible(true)] 
public interface IBake 
{ 
    Pastry Bake(); 
} 

public class Baker<Recipe> : IBake 
{ 
    public Baker(Recipe ingredients) {...} 

    public Pastry Bake() 
    { 
     ... 
    } 
} 

[ComVisible(true)] 
public class Bakery 
{ 
    public IBake GetBaker(string recipe) 
    { 
     // somehow get recipe type from string 
     // and create and return Baker<Recipe> 
     // Client can now call IBake.Bake(). 
    } 
} 

:

그래서, 일반적인 Baker<Recipe> 주어, 당신은 같은 것을 도입해야합니다. 그러나 VB.NET의 Controls 컬렉션이이 작업과 관련이 있다는 것을 알지 못합니다.

+0

나는 이것이 실제로 버그 (제네릭 형식을 사용하는 경우는 .NET 프레임 워크 또는 COM Interop를 함께하면 나도 몰라 생각 ()가 vb.net 사용하여 설명하기 위해 :. 내가 허용하는 경우 은 VB.NET이 작동하려면 어떤 타입의 객체를 'generic'디자이너가 처리 할 수 ​​있는지, 제대로 작동하는지는 userform입니다 (Microsoft.VisualBasic.Information.TypeName을 반환하여 이것을 알고 있습니다). 일반 객체를 명시 적으로 Userform으로 설정하면, 어떤 .NET 언어로든 오류가 발생했습니다 : { "서버가 예외를 throw했습니다. (HRESULT 예외 : 0x80010105 (RPC_E_SERVERFAULT))"} – jedd

+0

당신이 나를 거기에서 잃어 버렸습니다, 두렵습니다 ... –