방명록

[로그인][오픈아이디란?]

  1. 상준
    2009/06/23 21:10
    수정/삭제 댓글
    요즘 뭐하고 지내냐?
    잘 살고 있나 모르겠넹...

    그냥 생각나서 들려봤어 ㅋ
  2. 석원
    2009/04/30 16:04
    수정/삭제 댓글
    석원이다.

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

    문자 남겨라.
    010-7554-3909
  3. 2009/02/17 17:47
    수정/삭제 댓글
    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;
    }
  4. 로미
    2008/08/13 02:32
    수정/삭제 댓글
    기껏 들려서 ㅋㅋ 영화랑 일드리플만 달아놨네여 ㅋㅋ
    영화 검색하다가 오빠가 비슷한 취향이라고 이야기 한거 생각나서
    함들려봤어여 ㅋㅋㅋ 아... 배고프다 ㅠ,ㅠ
    오빠 건강한 일주일 되시구영~~~
    그럼 다음에 또 들릴께요
    • 나는산
      2008/08/13 09:38
      수정/삭제
      ㅋㅋ 고맙다. 너도 건강한 한 주 되고~ 다음에도 기대 할껭.
  5. 2008/08/01 17:51
    수정/삭제 댓글
    준희 잘 살고 있어?
    열심히 살고 있겠지..

    냉장고에 맥주좀 쟁여놓구 연락해...
    놀러가께
    • 2008/08/04 09:50
      수정/삭제
      옙. 맥주 챙겨놓고 연락드리겠습니다.
  6. 2008/04/11 18:09
    수정/삭제 댓글
    저도 궁금해서 들려봤어요.ㅋ
    오늘 바람이 너므 좋아요.
    우체국 핑계로 나가 별다방 커피한잔 들고오다가 삐긋해 쏟아버렸다는..ㅠ.ㅜ
    좀있음 퇴근하겠내여..^^
    홈피 잘 보고가요^^
    • 나는산
      2008/04/21 11:20
      수정/삭제
      ㅎㅎ 와서 고마웡~
  7. 상준
    2008/03/26 19:14
    수정/삭제 댓글
    잘 살고 있냥?
    걍 궁금해서 들려 봤뜸
    • 나는산
      2008/03/28 11:10
      수정/삭제
      그냥 일에 파묻어 살고 있음.
      인제 와이프 만삭이겠네~ ㅋㅋ
  8. 비밀방문자
    2008/03/07 17:58
    수정/삭제 댓글
    관리자만 볼 수 있는 방명록입니다.
    • 나는산
      2008/03/19 01:08
      수정/삭제
      안녕하세요. 이렇게 업데이트 안된 블러그에 방문해주셔서 감사합니다.
      정말 바뻐서 홈페이지 관리가 안되네요. ^^
      이번에 MIX08랑, Silverlight 2.0 때문에 계속 코딩 & 공부 중이랍니다. 덕분에 MS 본사 WPF, Silverlight 개발자들 만나는 시간도 가지고, Silverlight 2.0을 1월에 접하게 되어서 맨땅에 해딩했네요.

      본론으로 들어가서 결론부터 말씀드리면, XAML로 표현되는거는 모두 C#로 표현되고요, C#로 표현되는거는 거의 대부분 XAML로 표현할 수 있답니다. 접근 불가능한거는 거의 없는 걸로 알고 있습니다.

      하지만 병욱님께서 쓰신 글을 보면, 솔직히 코드가 없으면 잘 이해가 안됩니다. XAML로 애니메이션을 만들어서 애니메이션이 작동 중일때 값을 적용한다는 것인지, 처음부터 애니메이션을 CS로 만든다는 것인지 모르겠네요. 시간이 되시면 예제 코드를 올려주시면 이해가 빠르겠네요.


  9. yjheon
    2007/08/13 17:05
    수정/삭제 댓글
    xbap질문 추가사항 입니다.
    ------------------------
    먼저, 관심을 갖아주셔셔 고맙습니다.
    흐름은 아래와 같읍니다.

    1. 메인Page(=기동시 start되는 것)에 Grid로 구역을 나누어서 여기에 몇개의Dockpanel을 지정해놓고, 마치 Frame처럼 사용하려함.
    2. 필요에따라 다른 Dockpanel로 바꾸기위해(navigation처럼)
    app.xalm.cs에서 Hashtable을 생성하여 Application..properties에 설정해놓음.
    경우에따라서는 다른 Dockpanel의 cs에서도 사용해야하므로.
    3. W0031은 Dockpanel임.
    4. x_DpnWr0c0는 메인Page에있는 Dockpanel의 이름임.
    5. 소스를 수정하여 new W0031한것을 x_DpnWr0c0에 연결(화면표시상 덮어져보임)하는 부분만 해보았는데, 이것에는 error가 안남.
    error가 나는 부분은 Application..객체에서 다른 객체를 꺼내올때, 이놈을 인식못하는 듯함.
    이것이 WPF Appl로는 하자가 없었는데요.

    혹, 필요하면 관련 소스를 멜로 보내드리겠읍니다.
    그리고, 추가로 필요한게 있으면 멜로 알려주세요.
    멜: yjheon@itopsystem.co.kr
    -끝-
    • 나는산
      2007/08/20 12:50
      수정/삭제
      메일 잘 받았고요. 다시 메일 드렸습니다.
  10. yjheon
    2007/08/07 18:26
    수정/삭제 댓글
    xbap에서 질문입니다. 2가지경우.
    ---------------------
    W0031 cwin;
    cwin = new W0031();

    1) DockPanel dpnWk = (DockPanel) (Application.Current.MainWindow.FindName("x_DpnWr0c0";));
    dpnWk.Children.Add(cwin);

    2)y_myHash = (Hashtable)Application.Current.Properties["y_myHash"];
    String y_hashKey;
    y_hashKey = "3^" + "W0031";
    y_myHash[y_hashKey] = cwin;

    위의 code는 WPF Appl에서는 잘 실행되는 건데,
    XBAP으로 실행하면
    'dpnWk.Children.Add(cwin);'과
    'y_myHash[y_hashKey] = cwin;'에서
    dpnWk와'y_myHash가 NullreferenceException이 납니다.
    이것이 어떤 이유인지 아시면 답 부탁합니다.

    'y_myHash는 App.xaml.cs에서 미리생성한 hashtable입니다.


    • 나는산
      2007/08/08 13:05
      수정/삭제
      이걸로 정확하게 모르겠네요.

      혹시 더 자세히 알려줄수 있나요?

      W0031은 어떤 클래스인가요? 윈도우 인가요?

      혹시 Window이면 XBAP에는 Window를 지원하지 않습니다. Page로 변경해야할 것입니다.

<< PREV : [1] : [2] : [3] : [4] : [5] : ... [6] : NEXT >>

BLOG main image
by 나는산

공지사항

카테고리

전체 (534)
Thinking (102)
Using (34)
Programming (171)
Looking & Feeling (114)
Blog (40)
Camera & Photo (26)
Linux (3)
Etc (43)
Poetry (0)

글 보관함

달력

«   2009/07   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Total : 857584
Today : 187 Yesterday : 384