C#的普通类型都是封装的类,它完全不认识C++的结构体,给它指针也没用。C#和C++之间最好的联系方式就是COM接口,所以最好的解决方法就是把结构体封装成接口,把接口返回给C#,C#通过访问接口的属性来间接访问结构体成员的值。如果结构体成员中有其它结构体的指针,用同样的方式把结构体封装成接口

解决方案 »

  1.   

    .net 和 win32是两种不同程序,二者要通信必须要了解对方的数据在内存中具体布局,所以不会有一个统一的解决方案,就是同样的c++函数声明,如果具体的实现不同,也可能会有不同的调用方式。
    建议看看msdn下关于平台调用部分
    一般70%的结构指针可以用intptr代替,但这个intptr  C#如何构造,需要和c++保持一致
      

  2.   

    指针是可以传递的,但是没法调用,还是导出标准C接口,然后C#调用C接口吧
      

  3.   

    返回值是不用想了,你看看那个Win32SDK API返回结构体?都是通过参数传递结构体指针的。参数传递结构体倒是没问题,看MSDN例子
    http://msdn.microsoft.com/zh-cn/library/eadtsekz(v=vs.90).aspx