C++ DLL 함수 char*를 C#에서 읽어 오기

- C++에서 만든 dll 함수 


extern "C" __declspec(dllexport) char* Suma(char* a, char*b)

{

char* result = (char*)LocalAlloc(LPTR, strlen(a) + strlen(b) +1);

strcat(result, a);

strcat(result, b);

  LocalFree(result);

return result;

}






- C#에서 dll함수 적용하기

class Program

{


 [DllImport("C:\\DllName.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern System.IntPtr Suma(string a, string b);


static void Main()

{

string a = "a";

string b = "b";

IntPtr p = Suma(a,b);

string c = Marshal.PtrToStringAnsi(p);

Marshal.FreeHGlobal(p);

Console.WriteLine(c);

}

}




C++ 에서는 

LocalAlloc을 이용 메모리 할당 해줘야 함


C#에서는

 IntPtr 구조체를 선언하여 dll 함수 저장 후 

Marshal.PtrToStringAnsi() 메소드 이용하여 관리되는 string,  관리되지 않는 ANSI 문자열 복사 

Marshal.FreeHGlobal() 메소드 이용하여 할당한 메모리 해제 






 출처 - http://blog.naver.com/PostView.nhn?blogId=nickpooh&logNo=50108296076&redirect=Dlog&widgetTypeCall=true