Guestbook

Leave your greetings here.

[로그인][오픈아이디란?]
  1. 조동희 2009/12/03 13:19  Modify/Delete  Reply  Address

    형~ 오랜만에 다녀가요~ ^^
    12월 마무리 잘하시구요!!! ㅎㅎㅎ

  2. 조동희 2009/10/19 10:42  Modify/Delete  Reply  Address

    ㅋㄷ 형 방문 감사드려요~!!
    감기 조심하고, 이번주 금요일에 뵈여~ ㅎㅎㅎ

  3. 조동희 2009/10/05 15:49  Modify/Delete  Reply  Address

    형 명절 잘 보내셨어요? ㅎㅎㅎ
    저는 왠지 그냥 평범한 주말을 보낸거 같아서...
    명절 보낸 기분이 안나요~ ㅋㅋㅋ

  4. 조동희 2009/09/03 09:40  Modify/Delete  Reply  Address

    오랜만에 RSS에 들어왔더니 형 블로그 업뎃됐더라구요..ㅎㅎ
    닷넷 안한지 한참되서 그런가... 코드가 생소하게 느껴져요~!! ㅋㅋㅋㅋ

    저번에 못 나오셨으니까 다음에는 형이 맛난거 사주시는 거죠??
    형 시간날때 연락주세요~ ^^

  5. 조동희 2009/07/24 14:30  Modify/Delete  Reply  Address

    형 요즘은 통 포스팅이 없네요??
    많이 바쁘신가봐여~ ㅎㅎㅎ
    여름 휴가 가기전에 한번 모여야죠??
    형 일정을 알려주세용~~ ㅎㅎㅎ

    1. 나는산 2009/07/26 22:45  Modify/Delete  Address

      ㅋㅋ 그렇게... 문자보낼께

  6. 바다 2009/07/20 00:52  Modify/Delete  Reply  Address

    내하늘.. 고민 너무 많이 하지마세요
    내가 항상 믿는거 알죠^^
    생각대로 다 잘 될거예요
    힘내세요~~오빠 최고ㅎㅎ

  7. 조동희 2009/07/14 11:23  Modify/Delete  Reply  Address

    요즘 날씨가 왜 이런지...참...구질구질하네요..ㅎㅎ
    구경하고 갑니당..ㅎㅎㅎ

  8. 상준 2009/06/23 21:10  Modify/Delete  Reply  Address

    요즘 뭐하고 지내냐?
    잘 살고 있나 모르겠넹...

    그냥 생각나서 들려봤어 ㅋ

    1. 나는산 2009/07/26 22:45  Modify/Delete  Address

      일에 찌들고 있지 뭐...

  9. 석원 2009/04/30 16:04  Modify/Delete  Reply  Address

    석원이다.

    전화번호 바꿨으면 연락을 해야지...
    씨땡.~!!

    문자 남겨라.
    010-7554-3909

  10. 궁금이 2009/02/17 17:47  Modify/Delete  Reply  Address

    ATL 로 만든 COM 에 문자열 전달하기! C#에서 어떻게 하나요?

    pyobegy@nate.com

    자.. 무엇이 문제인지 시작해보겠습니다.

    ATL 로 만든 COM 에 문자열 전달하기! C#에서 어떻게 하나요?

    C# 서버부분입니다. 테스트용이고요, 컴포넌트를 사용하고 싶은게 목적입니다.
    당연, 참조추가로, ATL 로 작성한 COM 의 tlb 파일을추가했고, HiServerComLib 가 추가되었습니다.

    HiServerComLib.HiServerComClass Master = new HiServerComLib.HiServerComClass(); 이렇게, Master 포인터를 얻었고,

    Master.FtpConnect(); 컴포넌트 함수에 아무런 인자가 전달되지 않는 함수의 호출은 아주 순조롭게 잘 호출이 됩니다.

    하지만, ATL COM 에서 STDMETHOD(UpdateLog)(CHAR * AllPath, LONG * Result); 이렇게 매소드를 추가했는데,
    추가할때, 인자를 설정하는 부분에서 in 형으로 CHAR * 를, out 형으로 LONG * 를 지정하였습니다.
    분명, C++ 같은 과정으로 컴포넌트를 호출하면 잘 호출 됩니다. (소스코드는 아래쪽에 붙였습니다.)
    그런데...
    C# 에서는 에러가 발생합니다.
    Master.UpdateLog("./Data/Facility/Wall/Module/DER123.jpg";);
    이렇게 사용하니, 안되는군요. 에러메시지는
    오류 CS1502: 'HiServerComLib.IHiServerComClass.UpdateLog(ref sbyte)'에 가장 일치하는 오버로드된 메서드에 잘못된 인수가 있습니다.
    오류 CS1503: '1' 인수: 'string'에서 'ref sbyte'(으)로 변환할 수 없습니다.
    인자로 전달해야하는 자료형은 분명, CHAR * 라고 생각했는데, C#에서는 이런 자료형이 없는건지, 인식이 다른 방식으로 되는 것인지 알도리가 없네요. ref 참조형으로, sbyte 를 전달하라고 하는 것 같은데,
    sbyte 는 1바이트 크기더라구요, singed byte -128~127 까지..
    완전 답이 없죠.. 문자열을 전달해야하는데... 1바이트라니..
    어떤방법을 써서 전달해야하는지, 아니면 ATL로 입력 자료형을 다른걸로 줘야하는지,,,,,
    ATL 에서는 입력자료형에 제약이 있어서 그나마 문자열을 전달하기 위해 선택한것이 CHAR * 입니다.

    이제 소스코드를 읽어주세요 ㅠㅠ

    using System;
    using System.Collections.Generic;
    using System.Text;
    using HiServerComLib;


    namespace HiServerByCSharp
    {
    class Program
    {
    static void Main(string[] args)
    {
    HiServerComLib.HiServerComClass Master = new HiServerComLib.HiServerComClass();
    Master.FtpConnect();
    Master.UpdateLog(ref string a);
    //Master.UpdateLog("./Data/Facility/Wall/Module/DER123.jpg";);
    // ATL 로 COM 컴포넌트를 만들어 매쏘드이름을 FtpConnect(), UpdateLog() 로 만들었고,
    // 선언은 다음와 같습니다.
    // 두 함수 모두 LONG * 는 Out returnValue로 쓰기 때문에 신경을 쓰지 않습니다.
    // STDMETHOD(FtpConnect)(LONG* result);
    // STDMETHOD(UpdateLog)(CHAR * AllPath, LONG * Result);
    // UpdateLog 함수가 문제입니다.
    // ATL 에서 정말 답답하게도, CString 이 전달이 안되더군요, 그래도 CHAR *로도 별문제없이, C++ 코드에서는 문자열 넘기면 잘 받아줍니다.
    // 문제는, C# 에서 문자열을 던질려니까 (Master.UpdateLog("./Data/Facility/Wall/Module/DER123.jpg";); 이렇게..)
    // 오류 CS1503: '1' 인수: 'string'에서 'ref sbyte'(으)로 변환할 수 없습니다. 라는 에러가 뜨는군요..
    // 당연히, C++ 코드에서 문자열 넘겨서 잘 넘어가길래, C#에서도 문자열 넘기면 될줄 알았는데...
    // 아니되는군요..
    // 어떻게 이 난관을 해쳐나가야할지 모르겠습니다.

    }
    }
    }


    참고로, ATL 에서 COM을 만들어 C++ 에서 활용하는 소스입니다. 당연 잘돌아갑니다..

    #include "stdafx.h"
    #include "../../HiServerCom/HiServerCom/HiServerCom.h"
    #import "../../HiServerCom/HiServerCom/Debug/HiServerCom.dll"


    int _tmain(int argc, _TCHAR* argv[])
    {

    CoInitialize(NULL);
    HiServerComLib::IHiServerComClassPtr Master(__uuidof(HiServerComLib::HiServerComClass));
    Master->FtpConnect();
    Master->UpdateLog("./Data/Facility/Wall/Module/DER123.jpg";);
    // 문자열던져도 아주 잘돌아가죠~
    // C# 에서는 어떻게 해야될까요? 제발 도와주세요!!


    return 1000;
    }

    1. 나는산 2009/02/17 20:47  Modify/Delete  Address

      .NET 프레임워크 클래스 라이브러리에 변환 함수를 사용하면 되지 않을 까요?

      Convert.ToSByte(String)

      링크 : http://msdn.microsoft.com/en-us/library/b0hdkwd9.aspx

« Previous : 1 : 2 : 3 : 4 : 5 : ... 6 : Next »