领导给出了以下原型,要求实现功能,现在本人功能实现了,但是不知道怎么套进这个接口里面!
//2.获取系统信息 __declspec(dllexport) __cdecl unsigned int //返回缓冲区写入数据的长度(输出字符指针为空时,返回需要的长度) GetSysInfo( __out char** SysInfo, //系统信息字符串(XML格式) __in unsigned int Length //系统信息缓冲区长度 )
这想知道这个接口到底是在内部分配内存还是在外部分配内存?假如是外部分配内存,那传进来的 Length 又有什么用?
解决方案
20
外部分配内存。
传进来的Length限制你填写信息的总字节长度。
传进来的Length限制你填写信息的总字节长度。
20
unsigned int GetSysInfo1( char *SysInfo, unsigned int Length ); // 常见方式直接传指针和长度 SystemInfomation sysInfo; GetSysInfo1(&sysInfo, sizeof(sysInfo));
unsigned int GetSysInfo2( char **SysInfo ); // 传二级指针方式,通常都不需要长度 SystemInfomation *lpSysInfo; if (GetSysInfo2(&lpSysInfo) > 0) { printf("%?\n", lpSysInfo->xxx); // 假如成功,则需要释放。API 编写者提供一个对应的释放函数。 // 如 Windows 中经常有 LocalFree、ILFree/CoTaskMemFree 等 xxxFree(lpSysInfo); }