본문 바로가기

Mobile Develop/WinMoDev Q&A

dll을 dllimport로 불러서 사용하는데 문자가 깨져서 나와요

질문자 : nimi315 링크 : http://cafe.naver.com/winmodev/1701
<질문내용>

dll 파일을 불러서 사용하려고 하는데 숫자는 나오는데 문자는 영문인데도 깨져서 나오네요

왜 이러는지 모르겠습니다.

 


dll에 있는 함수는 char** 변수를 받아서 메모리를 할당하고 값을 넣어주는 것입니다.

이 값을 에뮬레이터에서  MessageBox로 불러서 확인해 보니 문자가 깨져 있네요;;

아래 소스처럼 했는데 어떤 문제가 있는 것인지 알려주시면 감사하겠습니다. ;;;;

관련소스/참고자료

:: dll 에 있는 함수


__declspec(dllexport) int

    test2(char** szText)

{

    (*szText) = (char*)calloc(1,30);

    memcpy((*szText),"test2",5);

    return 0;

}

 

 

::에뮬레이터 폼에 있는 소스


[DllImport("NFilterWinMobile.dll", EntryPoint = "test2")]

unsafe static extern int test2(char** sztext);

 

 

char* sztext2=null;

test2(&sztext2);

string tmp = new string(sztext2);

 


MessageBox.Show(tmp);

<답변내용>

TCHAR szDateText[256] 라고 문자열을 저장하는 변수가 있다고 가정하구요

__declspec(dllexport) int test2(LPTSTR szText)
{
    _tcscpy(szText, szDateText); 
     return 0;
}


이런식으로 LPTSTR 자료형으로 C#에서 저장할 문자열 버퍼(?)를 받아와서 복사 합니다


::에뮬레이터 폼에 있는 소스


DLL에서 받아오기 위한 자료형으로 StringBuilder를 이용해 선언 합니다
[DllImport("NFilterWinMobile.dll", EntryPoint = "test2")]
unsafe static extern int test2(StringBuilder str);

 

마찬가지로 받기 위한 문자열 버퍼를 StringBuilder를 이용해서 선언합니다
StringBuilder result = new StringBuilder(256);

test2(result); 해주시면 받아올 수 있습니다

 

C++과 C#의 자료형 변환 부분을 찾아보세요

작성일 : 2010.03.17 11:23

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다