我在c#里调用vc的DLL,VC里的DLL是对文件的读写操作,
但第一边执行正常,的二边执行是提示内存错误,为什么?
文件资源已经释放了,
是不是C#引入地是静态函数的原故???
提示错误是:“0x77f856a3”指令引用的“0xb6afb6fc”内存,该内存不能为“read”.

解决方案 »

  1.   

    还有可能是那个VC的DLL出现的问题,查一下DLL的代码(如果有的话)
      

  2.   

    Dll 中的代码没问题,我在vc下调试了几边都可以,??/
      

  3.   

    仔细检查一下vc和c#的数据类型之间的转换是否正确.
      

  4.   

    下面是文件操作看看是否有问题?????
    int CatWavFile(const char* sWavFile, PBYTE pBufNew, TTSDWORD dwBufNewLen)
    {
    FILE* fp;
    __try
    {
    TTSDWORD dwFileSize, dwDataSize, dwWavSize;
    if(dwBufNewLen <= 0)
       return TTSERR_OK;
    if(sWavFile == NULL)
       return TTSERR_READFILE;
    fp = fopen(sWavFile, "r+b");
    if(fp == NULL)
      {
                fp = fopen(sWavFile, "wb");
    if(fp == NULL)
    return TTSERR_WRITEFILE;
    }
    fseek(fp, 0, SEEK_END);
    dwFileSize = ftell(fp);
    if(dwFileSize == 0)
    {
    fwrite(pBufNew, 1, dwBufNewLen, fp);
    }
    else
    {
             fwrite(pBufNew + 44, 1, dwBufNewLen - 44, fp);
    dwFileSize = dwFileSize + dwBufNewLen - 44;
    dwDataSize = dwFileSize - 44;
    dwWavSize = dwFileSize - 8;
    fseek(fp, 44 - sizeof(TTSDWORD), SEEK_SET);
    fwrite(&dwDataSize, 1, sizeof(TTSDWORD), fp);
    fseek(fp, 4, SEEK_SET);
    fwrite(&dwWavSize, 1, sizeof(TTSDWORD), fp);
    }
    return TTSERR_OK;
    }
    __finally
    {
    fclose(fp);
    }
    }