C# 中调用c++DLL 问题
老鼠爱上猫 2006-05-16 10:21:48 c++ 接口入下
有两个结构体
typedef struct
{
unsigned long length;
unsigned char *value;
} SPT_DATA;
typedef struct
{
SPT_DATA CertCont[7]; //证书常用dn项DN(C/S/L/O/OU/CN/E)
SPT_DATA sn; //sn
SPT_DATA othername; //证书别名
} CertContStruct;
调用的接口 的一个参数是上面的结构体
EXTERN_SPI int C_ASPI_GetCertInfo(unsigned char *pCert, //设为NULL
unsigned char *pMode,
unsigned char *pCertContent,
CertContStruct *pCertConstantStruct);
想在C#里调用这个接口 ,
我先定义了两个对应的结构体
[StructLayout(LayoutKind.Auto)]
public struct SPT_DATA
{
public int length;
public byte[] valu;
}
[StructLayout(LayoutKind.Auto)]
public struct CertContStruct
{
public SPT_DATA[] CertCont ; //证书常用dn项DN(C/S/L/O/OU/CN/E)
public SPT_DATA sn ; //sn
public SPT_DATA othername; //证书别名
}
然后导入 DLL
[DllImport("CAspiDll_C.dll"]
private static extern int C_ASPI_GetCertInfo(byte[] pCert,byte[] pMode,byte[] pCertContent,CertContStruct pCertConstantStruct );
怎么来调这个方法:我调的时候提示我 结构体传不过去,没有实力化,
CertContStruct CCS = new CertContStruct();
CCS.CertCont.Length =1024;
CCS.CertCont.valu = new byte[1024];
CCS.CertCont= new SPT_DATA[7];
CCS.othername.length = 1024;
CCS.othername.valu =new byte[1024];
CCS.sn.length = 1024;
CCS.sn.valu = new byte[1024];
byte[] pc= new byte[4096*2];
byte[] pCC = new byte[2048];
byte[] pm = new byte[10];
pm = System.Text.Encoding.ASCII.GetBytes(pMode);//pMode是传入的字符串
pc = System.Text.Encoding.ASCII.GetBytes(C_ASPI_GetUserCert()); //C_ASPI_GetUserCert 也是返回字符串
int pCCLength = pCC.Length;
int j = C_ASPI_GetCertInfo(pc,pm,pCC,CCS);//到这就出错了.对象没有实例化
if(j==0)
{
pCertContent = System.Text.Encoding.ASCII.GetString(pCC,0,pCCLength);
pCertConstantStruct = CCS;
}
我觉得我的问题出在结构体的初始化,里面有数组,我实在不知道怎么初始化这些参数,