C++dll函数如下
power(int handle,usigned char meas,unsigned long freq,unsigned short band,unsigned short sample,unsigned long num,unsigned char trigger, unsigned char type,short threshold,short start_time,short *power,unsigned long *act_freq)
这个函数里面power和actfreq是输出,power指向了一个数组,num是其大小,不知道怎么能把这个*power数组的值传到C#里。
我转换成了
        [DllImportAttribute("tc_rfid.DLL")]
        public static extern int power_time(int handle, Byte meas, UInt32 freq, UInt16 band, UInt16 sample, UInt32 num, Byte trigger, Byte type, System.Int16 threshold, System.Int16 start_time,ref short power,ref uint act_frequency);调用时声明short[] power=new short[num];
power(....,ref power[0],ref act_frequency)
调用时会提示我尝试读写保护内存,求教达人!

解决方案 »

  1.   

    power(....,ref power,ref act_frequency)
      

  2.   

    和正常的一样power(....,ref power,ref act_frequency)
      

  3.   

    short[] power2=new short[num];
    IntPtr power=Marshal.UnsafeAddrOfPinnedArrayElement(power2,0);power(....,IntPtr power,ref act_frequency)
      

  4.   

    power(int handle,byte means,uint freq,ushort band,ushort sample,uint num,byte trigger,byte type,short threshold,short start_time,short[] power,ref uint act_freq)
    既然传的就是数组干嘛要写成ref?直接声明成数组不好嘛?
      

  5.   

    试过直接声明成数组的,也不好用找朋友写了个相同接口的函数封装成dll后,直接用数组就能调用郁闷了,不知道是不是dll问题,继续求大牛啊
      

  6.   

    感觉应该是调用的问题,就是不知道该声明成什么样子,手里的dll只有函数名,也不知道具体怎么声明的
      

  7.   

     [DllImportAttribute("tc_rfid.DLL",,CallingConvention = CallingConvention.Cdecl)]可能不是StdCall的调用方式
    http://www.cnblogs.com/KissKnife/archive/2006/11/04/549990.html
      

  8.   

    忘了结贴了,问题最后解决了,是dll版本的问题我表示很无奈,大家的方法应该都好使的,我尽量散分~