PDA

View Full Version : پیرامون SendMessage



menevlster
یک شنبه 23 آبان 1389, 20:02 عصر
سلام
من دو Aplication یکی به زبان C#‎‎‎‎‎‎‎‎ و دیگری به زبان C ایجادنمودم و از طریق SendMessage یک کلاس MyStruct را به C ارسال می کنم

کد زیر مربوط به C#‎‎‎‎‎‎‎‎‎‎ Aplication میباشد:


[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct MyStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string outstring;
}
MyStruct myStruct=new MyStruct();
myStruct.outstring= "test";
IntPtr ptrMyStruct = Marshal.AllocHGlobal(Marshal.SizeOf(myStruct));
Marshal.StructureToPtr(myStruct, ptrMyStruct, true);
API.COPYDATASTRUCT cds = new API.COPYDATASTRUCT();
cds.cbData = (uint)Marshal.SizeOf(myStruct);
cds.lpData = ptrMyStruct;
cds.dwData = new UIntPtr((uint)3);
//hwnd from FindWindow
API.SendMessage(hwnd,API.WM_COPYDATA,this.Handle.T oInt32(),ref cds);
a

کد زیر مربوط به C Aplication میباشد

typedef struct MyStruct{
char* outstring;
} MyStruct;
// lParam from Window message
PCOPYDATASTRUCT cds = (PCOPYDATASTRUCT) lParam;
MyStruct* map=(MyStruct*)cds->lpData;a
خطادر دریافت map->outstring//
}


در C Aplication اگر MyStruct را بصورت [char outstring[10 ایجاد کنیم خطا روی نمیدهد سئوال بنده اینست که چه تغییراتی باید در MyStruct چه در C و چه در C#‎‎‎‎‎‎‎‎ باید داد تا outstring را بصورت *char دریافت نمود؟