详见http://community.csdn.net/Expert/topic/4221/4221171.xml?temp=.1794092
盼有大侠解疑
不胜感激

解决方案 »

  1.   

    楼主,可以改变传进来的结构里面的值,请看下面例子C++代码
    --------------------------------------------------------
    struct cmppe_submit
    {
    char user[10][200];
    };extern "C" DllExport void GetUser(cmppe_submit* lpSubmit)
    {
    //这里改变传进来的结构里面的user
    strcpy(lpSubmit->user[0], "this is the return string"); 
    }C#代码
    ----------------------------------------------------------
    struct cmppe_submit
    {
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=2000)] public byte[] dst_addr;
    }[DllImport("MFCDLL.dll")]//用ref 声明结构
    private extern static void GetUser(ref cmppe_submit lpSubmit);
    下面调用cmppe_submit submit;
    submit.dst_addr = new byte[2000];
    GetUser(ref submit);string str = System.Text.Encoding.Default.GetString(submit.dst_addr, 0, 25); 
    Console.WriteLine(str);//测试结果
    this is the return string
    程序“[1448] OnlyTest.exe”已退出,返回值为 0 (0x0)。