public class CMyYa
{
#region Dll Import 
[DllImport("YaShu.dll",EntryPoint="YaData")]
static extern void YaData([In]byte[] pInData,int L, [Out]byte[] pOutData, ref int OutSize);
[DllImport("YaShu.dll",EntryPoint="UnYaData")]
static extern void UnYaData([In]byte[] pInData,int L, [Out]byte[] pOutData, ref int OutSize);
#endregion 
public CMyYa()
{
//
// TODO: 在此处添加构造函数逻辑
//

}
public string Ya(byte[] inData)
{
string outstr="";
int L=inData.Length;
int retL=0;
byte[] outData=new byte[L];
YaData(inData,L, outData,ref retL);
          byte[] RealOutData=new byte[retL];
for(int i=0;i<retL;i++)
{
RealOutData[i]=outData[i];
}
    //outstr=System.Text.Encoding.Default.GetString(RealOutData);
byte[] outData2=new byte[2000];
    int u=0;
            UnYaData(RealOutData,retL,outData2,ref u);//每次运行到UnYaData出错提示是未将对象引用设置到对象的实例!

string outstr2=System.Text.Encoding.Default.GetString(outData2);
              
return outstr; }
....
CMyYa Ya=new CMyYa();
string a="hellogfdjhjiuyerutyureytuieruiotioeiterotoepote[t[etpeptphhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhfg98e5657456456456456";
string b;
byte []p=System.Text.Encoding.Default.GetBytes(a);  
//a=System.Text.Encoding.Default.GetString(p); b=Ya.Ya(p); 
YaShu.dll在VC下测试正常所以那两个函数据没问题

解决方案 »

  1.   

    没道理,如果YaData正确的话,UnYaData也应该正确。如下
    int u=0;
    UnYaData(RealOutData,retL,outData2,ref u);进行修改和查看,查看RealOutData和retL中的值是否正确,
    其次修改u的值为2000,之后再试试。
      

  2.   

    如果还不行的话,贴出DLL中UnYaData如何实现的。
      

  3.   

    改成这样就没错
    byte[] outData=new byte[L];
    UnYaData(inData,L, outData,ref retL);
              byte[] RealOutData=new byte[retL];
    for(int i=0;i<retL;i++)
    {
    RealOutData[i]=outData[i];
    }
        //outstr=System.Text.Encoding.Default.GetString(RealOutData);
    byte[] outData2=new byte[2000];
        int u=0;
                UnYaData(RealOutData,retL,outData2,ref u);

    string outstr2=System.Text.Encoding.Default.GetString(outData2);
      

  4.   

    那你的dll函数调用有什么说明吗
      

  5.   

    在前面调用UnYaData没问题
    VC测试正常
    这是VC代码
    CString Buf;
    Buf="hellogfdjhjiuyerutyureytuieruiotioeiterotoepote[t[etpeptphhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhfg98e5657456456456456";
    char yy[100];
    int YaL;
    YaData((BYTE *)(const char *)Buf,Buf.GetLength(),(BYTE *)yy,YaL); char yy2[200];
    int UnYa;
    memset(yy2,0,200);
    UnYaData((BYTE *)yy,YaL,(BYTE *)yy2,UnYa);
    AfxMessageBox(yy2);