c++中的原函数是:
TootleResult TOOTLE_DLL TootleOptimizeVCache( const unsigned int* pnIB, unsigned int nFaces, unsigned int nVertices, unsigned int nCacheSize, unsigned int* pnIBOut, unsigned int* pnFaceRemapOut,TootleVCacheOptimizer eVCacheOptimizer);我用cli写的wrapper:
static TootleResult OptimizeVCache(array<int>^ input,unsigned int faceCount,unsigned int vertexCount, unsigned int cacheSize,array<int>^ output,TootleVCacheOptimizer optimizeFlag)
{
pin_ptr<int> ppInput = &input[0];
pin_ptr<int> ppOutput = &output[0];
unsigned int* pInput= (unsigned int*)ppInput;
unsigned int* pOutput = (unsigned int*)ppOutput; return TootleOptimizeVCache(pInput,faceCount,vertexCount,cacheSize,pOutput,nullptr,optimizeFlag); //这里抛出异常
}这个函数的作用是输入一组int值,通过特定算法排序之后输出
现在的问题是当输入数组长度超过3千万左右时,就会抛出AccessViolationException异常,其他情况下一切正常。弄了一下午,实在无解,请熟悉互操作高手指点....

解决方案 »

  1.   

    你应该看看这个函数实现是否有限制 TootleOptimizeVCache 
      

  2.   

    TootleOptimizeVCache内部定义了OutOfMemory异常,如果出错,会作为错误代码返回
    现在得到的是.net异常,我怀疑是封送的时候出现的错误,不过不太确定
      

  3.   

    不太像是c++库的问题
    我又试了一下,如果直接在vs里F5启动,当数组大小超过1800*1800左右的时候就会出现异常
    如果ctrl+F5,则要到2200*2200左右才会出现异常是不是.net互操作时对数据大小有限制?