详见http://community.csdn.net/Expert/topic/4447/4447467.xml?temp=.5458185
我在C#.Net中想调用VC写的DLL,  
VC中定义一个结构体  
struct  ReportStr  
{  
           int    sequencenumber1;  
           int    sequencenumber2;  
           int    sequencenumber3;  
//            char        usernumber[10];//行1  
           BYTE        state;  
           BYTE        errcode;  
};  
函数是    
ReportStr  getReportStr()  
{  
           ReportStr  sReport;  
           sReport.sequencenumber1  =  1;  
           sReport.sequencenumber2  =  2;  
           sReport.sequencenumber3  =  3;  
//            memcpy(sReport.usernumber,  "1234567890",22);//行2  
           sReport.state  =  11;  
           sReport.errcode  =  0;  
           return  sReport;  
}  
我在C#.Net中定义了结构体  
           public  struct  ReportStr  
           {  
 
                       public  int    sequencenumber1;  
                       public  int    sequencenumber2;  
                       public  int    sequencenumber3;  
//                        public  sbyte    []usernumber;//行3  
                       public  byte        state;  
                       public  byte        errcode;  
           };  
 
 
C#.NET中调用时代码如下  :  
           ReportStr  sReport  =  GetReportStr();  
 
问题是如果,  
我在VC结构体中不定义  char  usernumber[10];  
在.NET中也不定义public  sbyte    []usernumber;  
那么一切正常,返回的结构体能正常使用.可是我定义  了//行1,//行3,那么结果就不能得到了.  
错误信息:方法的类型签名与  PInvoke  不兼容  
可是DLL是第三方给提供的,无法更改,只能在.NET中想办法去处理.  
大家有什么好一些的办法吗.  
注:如果我在VC中定义char  usernumber[10];  在.NET中定义10个  sbyte  成员是可以得到的,  
但是我感觉应该还有更好的办法吧.请大家多提一下自己的看法.