用了c++写的一个dll
[DllImport("FingerAPI.dll", EntryPoint  "FingerFeatureExtract")]
private static extern int FingerFeatureExtract(byte[] pInImg, out byte[] pFeatureData, int nImgWidth, int nImgHeight);这个函数在dll中是下面这样声明的
int FingerFeatureExtract(unsigned char *pInImg, unsigned char *pFeatureData,int nImgWidth,int nImgHeight);C#中调用是这么写的
FingerFeatureExtract(bufferFile,out pMinutiaeOld,500,500);
bufferFile是一个有数据的数组,pMinutiaeOld是一个空数组,都是byte类型的
结果运行的时候就出现了"尝试读取或写入受保护的内存"错误刚学c#不久,急着要做一个东西出来,所以请各位帮帮忙,只有这些分,都奉上了,谢谢各位

解决方案 »

  1.   

    C#里的数组是引用类型,在定义时并没有分配相应的内存空间,只有将其初始化后才有相应的内存空间,但这时虽然有了内存空间,可内存地址也不是固定的。这些都和C++的数组不同。
        当你调用C++定义的函数将数值写入C#定义的数组时,会因得到的是一个无效的地址而出错。
      

  2.   

    to eyu660
    那应该怎样做才能解决这个问题呢
      

  3.   

    修改C++的程序先将传入的值 COPY一次 然后再操作试一下