2012-03-05 2 views
2

서버에 COM 개체를 만들어야합니다. (tutorial)C#에서 서버에 COM 개체 만들기

xlApp = CreateObject("Excel.Application", "\\MyServer") 

하지만 어떻게 C 번호에 같은 일을하는 방법 :이 작업을 수행 할 수 VB에서

?

+0

어떤 종류의 서버, 소프트웨어가 실행되고 있으며 사무실에 서버가 설치되어 있습니까? – CodingBarfield

+1

@ CodeBarfield 내가 아는 한, 그것은 2003 년 서버를 획득 한 또 다른 PC 일뿐입니다. "Excel.Application"- 예를 들어, 실제로는 사용자 지정 COM 개체가됩니다. – VextoR

+0

그냥 예를 들어 기쁘게 생각합니다. Excel을 서버에 설치하는 것은 좋지 않습니다. – MarkJ

답변

3

Microsoft.VisualBasic에 대한 참조를 추가해도 동일한 방법을 사용할 수 있습니다. 이것은 .NET에 매우 유용합니다. 사용하지 않는 것이 낭비입니다.

public static object CreateObject(string progid, string server) { 
     var t = Type.GetTypeFromProgID(progid, server, true); 
     return Activator.CreateInstance(t); 
    } 

글쎄, 한 줄 당신이 그것을 밀어 경우 : 코드의 두 라인, 할 그러나 간단하다. 이 특별한 경우에는 Microsoft.Office.Interop.Excel에 대한 참조를 추가하는 것이 좋습니다. 그런 다음 연산자를 사용하면 최신 바인딩이 아니기 때문에보다 빠른 코드를 얻을 수 있습니다. IntelliSense 가져 오기. 런타임에 바인딩을 사용하려면 키워드에 대해 C# 버전 4 지원을 사용해야합니다. 이전 버전의 C# 버전에서 런타임에 바운드 코드를 작성하는 것은 상당히 어려움이 있습니다.

+0

+1. BTW는 이제 OP가 실제로 엑셀을 사용하는 것이 아니라는 것을 보여주었습니다. 그것은 단지 예일뿐입니다. 사실 그것은 분명히 커스텀 COM 객체가 될 것입니다. – MarkJ

+0

'new '연산자가 서버 이름을 지정할 수 있다고 생각하지 않습니다 ... – Heinzi

+0

고맙습니다. 그것은 작동하지만, 오류를 반환 :' 'System .__ ComObject'유형의 COM 객체를 'InfoServ.TInfoServerClass'클래스 유형으로 형변환 할 수 없습니다. CLrov를 입력하고 IProvideClassInfo를 지원하지 않거나 interop 어셈블리가 등록되지 않은 COM 구성 요소는 __ComObject 형식으로 래핑됩니다. 이 유형의 인스턴스는 다른 클래스로 캐스트 할 수 없습니다. 그러나 기본 COM 구성 요소가 인터페이스의 IID에 대한 QueryInterface 호출을 지원하는 한 인터페이스에 캐스팅 될 수 있습니다. ' – VextoR

1

사용 this overload를 Type.GetTypeFromCLSID ...

var infsrv = new InfoServ.TInfoServerClass(); 

을하지만 서버에서 작업을 수행하는 방법을 알고하지 않습니다

나는 로컬 작업을 수행하는 방법을 알고있다.

2

Microsoft.VisualBasic.dll에 대한 참조를 C# 프로젝트에 추가하고 CreateObject을 직접 사용할 수 있습니다.

using Microsoft.VisualBasic; 

... 

dynamic xlApp = Interaction.CreateObject("Excel.Application", "MyServer"); 

참고 : 백 슬래시는 C#에서 특수 문자이기 때문에, 어느 서버 이름에서 \\을 제거 이것은 당신이 VB.NET 특정 기능을 많이 사용하는 기존 코드베이스가있는 경우 가장 쉬운 해결책이 될 수 있습니다 (위 참조) 또는 @"\\MyServer" 문자열을 이스케이프 처리하십시오.