原形
int CFCA_VerifySignedDataDetached(char *signature,  long signatureLength,  char* originalData, int *originalDataLength, char *certificate,  long *certificateLength, HCFCAToolkit toolkitHandle);signature           输入
signatureLength 输入
originalData 输入
originalDataLength 输入
certificate 输出
certificateLength 输出
toolkitHandle 输入转换成
[DllImport("CFCAToolkit.dll", EntryPoint = "CFCA_VerifySignedDataDetached", SetLastError = true,
        CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
        public static extern int CFCA_VerifySignedDataDetached(string signature, long signatureLength, string originalData, ref int originalDataLength, char[] certificate, ref long certificateLength, IntPtr toolkitHandle);调用报AccessViolationException异常,似乎是certificate这个参数传递造成的,请高手指点!

解决方案 »

  1.   

    CallingConvention 试过stdcall了
    certificate这个参数试过用StringBuilder了
    都失败
    另外传递的内容全部为ASSII字符集
      

  2.   

    参数 char[] certificate 与原型中char *certificate不一致,你最好将char[] certificate
    换成string certificate试一下
      

  3.   

    char[] certificate 要与char *certificate一致,除非certificate 最后一个字节是0,否则会出错,你看看
      

  4.   


    参数 char[] certificate 与原型中char *certificate不一致,你最好将char[] certificate
    换成string certificate试一下
      

  5.   

    char[] certificate换成string certificate
      

  6.   

    该问题已经解决。问题出在C的long型为32位,而.net的long型是64位,把long映射为int型问题就解决了。谢谢大家的热心帮助