#ifndef ZZC_SETCA_H
#define ZZC_SETCA_Htypedef struct
{
char *SerialNum;
char *IssuerCountryName;
char *IssuerOrgnizationName;
char *IssuerCommonName;
char *CountryName;
char *OrgnizationName;
char *DepartmentName;
char *CommonName;
char *Sur;
char *GivenName;
char *Rights;
char *GroupName;
char *Title;
unsigned char PubKey[128];
char *IdentityName;
char *EMail;
char *IP;
char *DNS;
long NotBefore;
long NotAfter;
long CertUsage;
}CertDBItem;extern "C" int WINAPI GetCertDBItemFromCert(int certlen,unsigned char *pcert,CertDBItem *pcertdbitem);#endif以下是小弟我在C#中定义的接口,为什么执行结果总是为空,请各位指点 public struct CertDBItem
{
public string SerialNum;
public string IssuerCountryName;
public string IssuerOrgnizationName;
public string IssuerCommonName;
public string CountryName;
public string OrgnizationName;
public string DepartmentName;
public string CommonName;
public string Sur;
public string GivenName;
public string Rights;
public string GroupName;
public string Title;
public string PubKey;
public string IdentityName;
public string EMail;
public string IP;
public string DNS;
public int NotBefore;
public int NotAfter;
public int CertUsage;
} [DllImport("SetCA.dll")]
public static extern int GetCertDBItemFromCert(int certlen,byte[] pcert,CertDBItem[] pcertdbitem);
以下是我的调用方式
wjjmk.CertDBItem[] objcertdbitem = new wjjmk.CertDBItem[1];
int i = wjjmk.GetCertDBItemFromCert(intcertlen, bytdatacert, objcertdbitem);
intcertlen和bytdatacert参数是没有问题的,关键是最后参数是不是有问题,请指点
#define ZZC_SETCA_Htypedef struct
{
char *SerialNum;
char *IssuerCountryName;
char *IssuerOrgnizationName;
char *IssuerCommonName;
char *CountryName;
char *OrgnizationName;
char *DepartmentName;
char *CommonName;
char *Sur;
char *GivenName;
char *Rights;
char *GroupName;
char *Title;
unsigned char PubKey[128];
char *IdentityName;
char *EMail;
char *IP;
char *DNS;
long NotBefore;
long NotAfter;
long CertUsage;
}CertDBItem;extern "C" int WINAPI GetCertDBItemFromCert(int certlen,unsigned char *pcert,CertDBItem *pcertdbitem);#endif以下是小弟我在C#中定义的接口,为什么执行结果总是为空,请各位指点 public struct CertDBItem
{
public string SerialNum;
public string IssuerCountryName;
public string IssuerOrgnizationName;
public string IssuerCommonName;
public string CountryName;
public string OrgnizationName;
public string DepartmentName;
public string CommonName;
public string Sur;
public string GivenName;
public string Rights;
public string GroupName;
public string Title;
public string PubKey;
public string IdentityName;
public string EMail;
public string IP;
public string DNS;
public int NotBefore;
public int NotAfter;
public int CertUsage;
} [DllImport("SetCA.dll")]
public static extern int GetCertDBItemFromCert(int certlen,byte[] pcert,CertDBItem[] pcertdbitem);
以下是我的调用方式
wjjmk.CertDBItem[] objcertdbitem = new wjjmk.CertDBItem[1];
int i = wjjmk.GetCertDBItemFromCert(intcertlen, bytdatacert, objcertdbitem);
intcertlen和bytdatacert参数是没有问题的,关键是最后参数是不是有问题,请指点
char *: StringBuilder
or
char*: byte[]
[Out,MarshalAs(UnmanagedType.LPArray)]CertDBItem[] pcertdbitem);