C#에서 d ++를 사용하여 StringBuilder 개체를 편집하려고합니다. 내 C++ 코드는 다음과 같습니다C#의 StringBuilder 마샬링 문제
extern "C" __declspec(dllexport) void __stdcall PrintHead(char* myString)
{
myString = "testIsOkey";
}
내 C# 코드는 다음과 같습니다
프린트 헤드가 호출 된 후[DllImport("StringEdit.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = false)]
public static extern void PrintHead([MarshalAs(UnmanagedType.LPStr)] StringBuilder stringBuilder);
private void button1_Click(object sender, EventArgs e)
{
StringBuilder stringBuilder = new StringBuilder("123456");
PrintHead(stringBuilder);
}
, 난에 "123456"에서의 StringBuilder 개체의 값이 변경되는 것을 볼 것으로 예상하고있다 " testIsOkey "하지만 변경되지 않습니다. 나는 어디에서 실수를하는지 알 수 없다.
도움 주셔서 감사합니다.
프린트 헤드에 대한 호출이 실제로해야한다 '프린트 헤드 (버퍼, buffer.Capacity + 1);' 마샬 러에 의해 추가 된 널 바이트를 설명합니다. 자세한 내용은 http://msdn.microsoft.com/en-us/library/s9ts558h.aspx의 하단 섹션을 참조하십시오. – MrSlippers