프로세스간 토신 하는데 질문 드립니다...

일단 오랜만에 글을 쓰는데 질문 글이라 죄송합니다.
C# 프로세스간 데이터를 주고 받을려고 하는데 계속해서 에외가 발생하는데 도움 좀 부탁드립니다.

송신하는 부분의 코드입니다.

 try
            {
                Process[] pro = Process.GetProcessesByName("CS_Copydata_Test3");

                if (pro.Length > 0)
                {
                    int size = Marshal.SizeOf(myStruct);
                    byte[] tempArr = new byte[size];

                    ptr = Marshal.AllocHGlobal(size);

                    Marshal.StructureToPtr(myStruct, ptr, true);
                    Marshal.Copy(ptr, tempArr, 0, size);

                    Marshal.Copy(tempArr, 0, ptr, size);

                    cds.cbData = size;
                    cds.dwData = new IntPtr(7);
                    cds.lpData = ptr;

                    SendMessage(pro[0].MainWindowHandle, WM_COPYDATA, 0, ref cds);

                    Marshal.FreeHGlobal(ptr);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

수신하는 부분의 코드입니다.

try
                    {
                        label4.Text = "Struct2";
                        CustomStruct2 myStruct = new CustomStruct2();

                        int size = Marshal.SizeOf(myStruct);
                        byte[] arr = new byte[size];
                        IntPtr ptr = Marshal.AllocHGlobal(size);

                        Marshal.Copy(cds.lpData, arr, 0, cds.cbData);

                        Marshal.Copy(arr, 0, ptr, size);

                        myStruct = Marshal.PtrToStructure<CustomStruct2>(ptr);

                        label3.Text = myStruct.intNum.ToString();
                        label5.Text = myStruct.doubleNum.ToString();
                        label6.Text = myStruct.boolStatement.ToString();
                        label7.Text = myStruct.stringString;

                        Marshal.FreeHGlobal(ptr);
                    }
                    catch (AccessViolationException e)
                    {
                        MessageBox.Show(e.Message);
                    }
                    break;

원래는 Marshal.StructureToPtr 함수를 통해서 했을때 계속해서 보호된 메모리에 접근한다고 해서 불가능하여 구조체를 byte 배열로 변경하여 하는데 구조체가 작을때는 괜찮은데 조금만 커져도 보호된 메모리에 접근한다고 불가능합니다.

구조체는 다음과 같습니다.

// 될때
public struct CustomStruct2
        {
            public int intNum;
            public double doubleNum;
            public bool boolStatement;
        }

// 안될때
public struct CustomStruct2
        {
            public int intNum;
            public double doubleNum;
            public bool boolStatement;
            public string stringString;
        }

도움 부탁드립니다.

System.IO.MemoryMappedFiles 의 MemoryMappedFile을 사용하여 구현해보면 어떨까요?

Serialization을 써보시는 건 어떤가요?

위의 두분이 말씀하신것들로 한번 시도해보겠습니다.

위의 두분 모두 감사합니다. 일단 모두 잘되긴하는데 저의 목표는 WM_COPYDATA 메시지를 보내 COPYDATASTRUCT로 데이터 통신이여서 질문에 애매모호 했던점 사과드립니다. 하지만 모두 큰 도움이 되었습니다. 감사합니다.

C# string을 그냥 보내시면 안 될텐데요

Marshal.StringToCoTaskMemAnsi 한 번 불러보세요

문자열만을 보낼때는 해당 함수를 통해 잘 되는 것을 확인하였습니다. 답글 감사합니다.