[C#] .NET 이 아닌 native 코드로 작성된 외부 DLL 사용 방법(파라미터의 타입을 알 수 없는 경우)

by Blogger 하얀쿠아
2012. 2. 8. 18:56 소프트웨어 Note/C#
외부 메소드의 파라미터가 char* 인 경우(데브피아 C# 마을, 질문&답변)
 

가장 일반적으로 포인터로 넘겨서 값을 받아올경우 할당되어 있는 방으로 넘겨 받아야 합니다.
하지만 DllImportAttribute 클래스를 이용하여 맵핑 하시기에 어려움을 겪으시는것 같네요.
해당 매개변수는 호출지점에 구도에 따라 string, StringBuilder, byte, unsafe.... 맵핑이 가능합니다.
 
원초적인 방법으로 IntPtr 을 이용한 메모리 활당하여 이용하는 방법도 가능합니다.
 
사용하시는 " CoreTTS_DLL_API.dll " 상용컴포넌트에 대해서 어떠한 정보를 모르기에
매개 변수나 필드를 비관리 코드로 마샬링식별을 싱글 바이트 null로 끝난다는 기준으로 예제코드를 작성하였습니다.
또한 System.Text.StringBuilder 타입 대신 System.String 타입을 사용하셔도 무방합니다.

[DllImport("CoreTTS_DLL_API.dll"), EntryPoint="VOICE_PLAY",

  CallingConvention = CallingConvention.StdCall, CharSet=CharSet.Ansi )] 

public static extern int VOICE_PLAY(

                                    [MarshalAs(UnmanagedType.LPStr)] StringBuilder Language , 

                                    [MarshalAs(UnmanagedType.LPStr)] StringBuilder text);

 
이 댓글을 비밀 댓글로