c++ 的动态库在很多地方被调用,比如我们想在动态库里面返回一个字符串该怎么做呢?
在这里我以自己做过的一个项目为例:PCSC读写器Reset复位拿到ATR返回给c#上层。
/*---------------------------------------------------------
函数说明 : 卡片复位(查询获取ATR值)
输入参数 :
CString strName
输出参数 : ucATR,存放ATR的首字节地址;ATRLg,长度
返回值 : SCARD_S_SUCCESS (0),成功。
---------------------------------------------------------*/
int pcscReader::m__CardReset(byte* ucATR,int* ATRLg)
{
CString strFunName; strFunName.Format("%s",__FUNCTION__);
DWORD dwLength=0;
DWORD dwCardState = 0;
long ProtocolType;
ProtocolType= SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
LONG lReturn = SCardStatus(m_hCard, m_strReaderName.GetBuffer(0), &dwLength, &dwCardState,
(unsigned long *)&ProtocolType,ucATR,(LPDWORD)ATRLg);
return lReturn;
}
比如我们在上层调了这个函数,它返回的参数只是地址和长度,我们拿不到实际的值,所以我们现在要将这个内存里面的数据取出来转成字符串传到c#上层。
所以做了如下修改