출처 : http://cafe.naver.com/headstudy.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=834
com을 등록하는 방법을 찾다가 우연치 않게 발견한 것이다. ㅠㅠ..
네이버 카페에서 퍼온글이며 문제가 있을 경우 삭제하겠습니다.
안녕하세요. 마리입니다. ^^;
제가 또 뉴스그룹 서핑 도중... 질문을 하나 만났습니다.
"C#으로 COM을 생성하고 asp에서 VB나 C++의 COM처럼 사용할 수 있을까요?"
답변은 할 수 있다는 것이였습니다.
"C# 으로 만든 컴포넌트는 CCW( COM Callable Wrapper) 에 의해서 regsvr32.exe 로 COM 개체
를 등록된 것과 같은 효과로 등록되어질 수 있습니다."
저도 궁금하기도 하고 호기심도 생기고 해서... 테스트를 해보려고 맘 먹었습니다.
그런데 COM을 첨 해보는지라... 좀 헤맸습니다. ㅋㅋ
간단하게 테스트 예제와 함께 과정을 살펴보겠습니다.
(아래의 과정은 MS웹 사이트의 기술자료 http://support.microsoft.com/default.aspx?scid=kb;ko;306296 의 방법으로 한 것 입니다.)
먼저 새 프로젝트로 C#프로젝트에서 클래스 라이브러리를 하나 만듭니다.
이름은 ServicedCOM으로 하겠습니다.
자동 생성된 클래스 Class1의 이름을 Com_Test로 변경합니다. 아래... 생성자도 변경 하시는거
아시죠? ^^; 소스를 보여드리겠습니다.
using System;
using System.EnterpriseServices;
namespace
ServicedCOM
{
public class Com_Test :
ServicedComponent
{
public
Com_Test()
{
}
public string DoTrans()
{
return ".NET COM+ Testing";
}
}
}
만약에 System.EnterpriseServices네임스페이스가 자동 완성되지 않으신다면...
솔루션 탐색기에서 참조추가를 합니다. 거기서 .NET 탭중 쭉..내리시면 있습니다.
등록을 해주세요. 소스는 간단한 문자열을 리턴하는 소스입니다.
이제 AssemblyInfo.cs파일에서 추가를 합니다.
System.EnterpriseServices 역시 상단에 using키워드로 명시하시구요.
[assembly:
ApplicationActivation(ActivationOption.Library)]
[assembly:
ApplicationName("Com_Test")]
이제 컴파일을 합니다. 그럼 dll파일이 하나 생기겠죠?
이제 어셈블리 이름을 강력하게 지정해야 합니다.
- 시작 메뉴에서 프로그램을 가리키고 Microsoft Visual Studio .NET을 누른 다음 Visual Studio .NET Tools를 눌러 Visual Studio .NET 명령 프롬프트를 엽니다.
- 명령 프롬프트에서 sn.exe -k ServicedCOM.snk를 입력하여
어셈블리에 강력한 이름을 지정합니다.
강력한 이름으로 어셈블리에 서명하는 방법에 대한 자세한 내용은 .NET Framework SDK 설명서를 참조하십시오. - ServicedCOM.snk를 프로젝트 폴더에 복사합니다.
- AssemblyInfo.cs에서 AssemblykeyFile 코드를 다음 코드로 대체합니다.
[assembly: AssemblyKeyFile("..\\..\\ServicedCOM.snk")]
자... 이제 레지스트리에 등록을 해야 합니다.
- 시작 메뉴에서 프로그램을 누르고 Microsoft Visual Studio .NET을 누른 다음 Visual Studio .NET Tools를 눌러 .NET 명령 프롬프트를 엽니다.
- .NET 명령 프롬프트에서 regsvcs 프로젝트경로\bin\Debug\servicedcom.dll을 입력합니다. 그러면 클래스와 같은 이름의 COM+ 라이브러리 응용 프로그램이 만들어집니다.
이제 완료가 되었습니다.
간단한 asp코드로 테스트를 해보세요.
<%
set Com =
server.createobject("ServicedCOM.Com_Test")
response.write
Com.DoTrans()
%>
서핑 하던 도중 다른 방법도 있군요...
using System;
namespace
ServicedCOM
{
public class Com_Test
{
public
Com_Test()
{
}
public string DoTrans()
{
return ".NET COM+ Testing";
}
}
}
어셈블리쪽은 건드리지 마세요. 아... 위의 소스가 아니고 첨의 그대로...
regasm 프로젝트경로\bin\Debug\ServicedCOM.dll /codebase
이렇게 하면 COM에 등록이 됩니다. 사용법은 위와 동일하구요....