C#에서 VBA에서 열거할 수 있는 COM 개체 만들기
10969 단어 VBA.NETFrameworkC#
소개
C#에서 COM 구성 요소를 만들고 Microsoft Office 매크로에서 개체를 열거하고 싶다고 생각합니다.
COM 코드
.NET 클래스 라이브러리로 프로젝트를 만들고 응용 프로그램 > 어셈블리 정보의 For Each...다음 및 빌드 > 출력에 어셈블리를 COM 참조 가능하게 만들기 을 활성화합니다. GUID 값은 도구로 생성됩니다. 관리자로 Visual Studio를 실행하고 빌드하면 그 과정에서 COM을 등록해 줍니다. 우도도 "COM 컴포넌트를 C#으로 작성하자"고 생각하고있는 전문가들에게는 COM에 대한 자세한 설명을 말할 필요가 없을 것입니다 ...
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace MyCOM
{
[Guid("1???????-????-????-????-????????????")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IPerson
{
string FirstName { get; }
string LastName { get; }
int Age { get; }
string GetInfo();
}
[Guid("2???????-????-????-????-????????????")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IPerson))]
public class Person : IPerson
{
public string FirstName { get; }
public string LastName { get; }
public int Age { get; }
public Person(string firstName, string lastName, int age)
{
FirstName = firstName;
LastName = lastName;
Age = age;
}
public string GetInfo() {
return string.Format("{0} {1} ({2})", FirstName, LastName, Age);
}
}
[Guid("3???????-????-????-????-????????????")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
public interface IPersons : IEnumerable
{
new IEnumerator GetEnumerator();
}
[Guid("4???????-????-????-????-????????????")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IPersons))]
public class Persons : IPersons
{
System.Collections.Generic.List<Person> _data = new List<Person>();
public Persons()
{
// SAMPLE DATA
_data.Add(new Person("なまえ", "みょうじ", 20));
_data.Add(new Person("名前", "苗字", 21));
}
public IEnumerator GetEnumerator()
{
return _data.GetEnumerator();
}
}
}
생성 된 객체의 유형
COM 상호 운용 기능 등록
(비 제네릭 쪽)은 System.Collections.IEnumerator 을 자동으로 구현해주는 것 같습니다.
이용 예
엑셀이나 워드의 매크로로부터 호출해 봅니다. 참조 설정을 잊지 않고 ...
Sub Sample()
'
' Sample Macro
'
'
Dim persons As New MyCOM.persons
Dim item As MyCOM.Person
For Each item In persons
MsgBox item.GetInfo()
Next
End Sub
IEnumVARIANT
참고 사이트(감사!)
.NET 클래스 라이브러리로 프로젝트를 만들고 응용 프로그램 > 어셈블리 정보의 For Each...다음 및 빌드 > 출력에 어셈블리를 COM 참조 가능하게 만들기 을 활성화합니다. GUID 값은 도구로 생성됩니다. 관리자로 Visual Studio를 실행하고 빌드하면 그 과정에서 COM을 등록해 줍니다. 우도도 "COM 컴포넌트를 C#으로 작성하자"고 생각하고있는 전문가들에게는 COM에 대한 자세한 설명을 말할 필요가 없을 것입니다 ...
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace MyCOM
{
[Guid("1???????-????-????-????-????????????")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IPerson
{
string FirstName { get; }
string LastName { get; }
int Age { get; }
string GetInfo();
}
[Guid("2???????-????-????-????-????????????")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IPerson))]
public class Person : IPerson
{
public string FirstName { get; }
public string LastName { get; }
public int Age { get; }
public Person(string firstName, string lastName, int age)
{
FirstName = firstName;
LastName = lastName;
Age = age;
}
public string GetInfo() {
return string.Format("{0} {1} ({2})", FirstName, LastName, Age);
}
}
[Guid("3???????-????-????-????-????????????")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
public interface IPersons : IEnumerable
{
new IEnumerator GetEnumerator();
}
[Guid("4???????-????-????-????-????????????")]
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IPersons))]
public class Persons : IPersons
{
System.Collections.Generic.List<Person> _data = new List<Person>();
public Persons()
{
// SAMPLE DATA
_data.Add(new Person("なまえ", "みょうじ", 20));
_data.Add(new Person("名前", "苗字", 21));
}
public IEnumerator GetEnumerator()
{
return _data.GetEnumerator();
}
}
}
생성 된 객체의 유형
COM 상호 운용 기능 등록
(비 제네릭 쪽)은 System.Collections.IEnumerator 을 자동으로 구현해주는 것 같습니다.
이용 예
엑셀이나 워드의 매크로로부터 호출해 봅니다. 참조 설정을 잊지 않고 ...
Sub Sample()
'
' Sample Macro
'
'
Dim persons As New MyCOM.persons
Dim item As MyCOM.Person
For Each item In persons
MsgBox item.GetInfo()
Next
End Sub
IEnumVARIANT
참고 사이트(감사!)
Sub Sample()
'
' Sample Macro
'
'
Dim persons As New MyCOM.persons
Dim item As MyCOM.Person
For Each item In persons
MsgBox item.GetInfo()
Next
End Sub
- LIM BIO LIONG
Exposing an Enumerator from Managed Code to COM - EternalWindows
Reference
이 문제에 관하여(C#에서 VBA에서 열거할 수 있는 COM 개체 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/otagaisama-1/items/48e00042dd4dfdb7ae8d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)