'컴퓨터/.NET'에 해당되는 글 2건

  1. 2006/09/18 C# dll with VC
  2. 2006/09/15 UDDI VC with C#

C# dll with VC

C# dll with VC 컴퓨터/.NET 2006/09/18 19:01

어떻게 C#의 클래스를 VC에서 어떻게 쓸까.

1. C#에서 클래스를 만든다.
1.1 C# 클래스를 만든다.
(프로젝트 속성 -> 구성 속성 -> 빌드 -> COM Interop 등록을 true로 해주면 1.4을 안해도 됨. 그러나 어짜피 다른 컴퓨터에서 한번은 해주어야 함 -_ -)

ClassLibrary1.cs

using System;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
  [ClassInterface(ClassInterfaceType.AutoDual)]
   public class Class1
  {
       ...
  }

  public SayHello()
  {
       //do something..
  }
}


1.2 생성된 파일을 AssemblyInfo.cs의 맨 밑에 추가하여 준다.
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\sn -k ClassLib.snk

[assembly: AssemblyKeyFile("./ClassLibrary1.snk")]

1.3 빌드
  ... -_ -

1.4 어샘블리를 등록한다.
regasm /tlb:ClassLibrary1.tlb ClassLibrary1.dll  /codebase


2.1 VC 코드를 생성한다.
#import "../Dll/mscorlib.tlb" raw_interfaces_only
using namespace mscorlib;

#import "../Dll/ClassLibrary1.tlb"
using namespace ClassLibrary1;

int main()
{
  CoInitialize(0);

  _Class1Ptr class1(__uuidof(Class1));

  class1->SayHello()

  CoUninitialize();

  return 0;
}



ps1. MessageBox와 같은 Form이 들어갈 경우 메모리 릭이 발생한다. 왜? -_ -
ps2. 클래스가 System.Windows.Forms.Form을 상속받을경우 VC에서 못부른다.. 왜? - _-
ps3. Com의 메소드로 부터 값(문자열)을 돌려받고 싶으면 out 을 쓰자.
C#
  public void MethodName(out String outString)
  {
       ...
  }

VC
  BSTR outString = 0;
  HRESULT hResult = class1->MethodName(&outString);
  if ( hResult == S_OK )
  {
       // 값을 잘 가져왔군!!
  }
   // 메모리 해제를 해주어야 함 -_ -
  USES_CONVERSION;
  CString res = OLE2CA(outString);


참조 링크: http://groups.google.com/group/microsoft.public.dotnet.languages.vc/browse_frm/thread/6bfd1115e804cc58/e6ce1ba6326bc680?q=group:microsoft.public.dotnet.languages.vc+insubject:system.xml.schema

Posted by Hikasiru

UDDI VC with C#

UDDI VC with C# 컴퓨터/.NET 2006/09/15 14:17
○ UDDI (Universal Description, Discovery, and Integration), a Web services registry and discovery mechanism, is used for storing and categorizing business information and for retrieving pointers to Web services interfaces.

UDDI 서버에서 서비스 이름과 제공자 이름으로 WSDL을 검색하는 프로그램을 VC로 구현.


삽질 로그.

1. 순수 VC로 구현 시도
1.1. 환경 설정. & 구현 예제.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/uddi/uddi/preparing_the_environment.asp

구현 예제를 보면 알겠지만 서비스를 등록하는 예제임. 뭐 예제는 잘 돌아가겠으나 문제는 서비스 검색시 필요한 _GetServiceDetailPtr 를 쓰는 부분에서 문제점 발생.
_GetServiceDetailPtr->ServiceKeys가 IUnknownPtr로 가져온다.. C#에서는 StringCollection으로 구현되어있음(맞나.? -_ -)

결국 지지. 해결책을 아는 사람은 손!.



2. C#으로 폼까지 다 만들고 검색 결과를 넘겨주는 방식 시도
2.1. UDDI SDK 설치시 C# 예제가 있다. 이것을 DLL로 만들어서 시도를 하였지만 실패.
C#에서 클래스 작성 시 System.Windows.Forms.Form을 상속 받아버리니까 VC에서 못가져 온다.

결국 지지. 이것 역시 해결책을 아는 사람은 손 -_ -;;
ps. 폼이 들어가는 메소드 호출시(예. MessageBox) 메모리 릭이 발생한다;;



3. VC에서 폼을 만들고 C#에서 메소드만 만들어 호출.
잘 된다.
단점: 처음 COM 검색 시 3~4 초 정도 걸림 ㅡㅡ..


Posted by Hikasiru
1 
하단 사이드바 열기

BLOG main image