做了个DLL文件,获取电脑的网卡地址(MAC),请问我如何返回字符串呢?返回网卡的字符串啊?我的函数是这样的
extern "C" __declspec(dllexport) TCHAR* GetMachineMAC()
{
char *temp=null;
给temp new了空间后,只能在外部释放内存了,感觉这样不好,还需要其他人在外部释放内存啊,请问有什么好的方法吗?如何正确的返回一段字符串.
}DLL返回字符串
extern "C" __declspec(dllexport) TCHAR* GetMachineMAC()
{
char *temp=null;
给temp new了空间后,只能在外部释放内存了,感觉这样不好,还需要其他人在外部释放内存啊,请问有什么好的方法吗?如何正确的返回一段字符串.
}DLL返回字符串
例如在c++里分配内存的方式 可以有 malloc new 或API heapalloc,
如果调用方例如为 vb ,如果从你的函数GetMachineMAC返回一个 动态分配内存,但不知道调用的是那个函数来分配内存的,例如从malloc 创建内存 就不能调用delete释放内存合法的调用规范 ,例如大量的win api 都是由用户提供一个缓冲区来读取数据的,例如你的函数可以 为这样的原型 BOOL __stdcall GetMachineMAC(__out BYTE * buff);另外 mac 就是无符号的 char ,你上面用了 TCHAR ,不是很正确
我只是想返回一段字符串 如网卡地址:A-B-C-D-E-F感谢上面的2位朋友.
#define L4BIT(w) ((BYTE)(((DWORD_PTR)(w)) & 0xf))
#define H4BIT(w) ((BYTE)((((DWORD_PTR)(w)) >> 4) & 0xf))
//ARP扫描回调函数
void __stdcall ArpScanRecvProc(void * pv, void * ArpHdr)
{
ARP_HEADER * arphdr=(ARP_HEADER*)ArpHdr;
RecvQue * rq =(RecvQue*)pv;
if(rq)
{ListData * ld = new ListData();
CString cstr;
cstr.Format(L"%d\n\0",num++);
ld->number=cstr;
in_addr ia;
cstr.Empty();
ia.S_un.S_addr=arphdr->sender_praddr;
cstr.Format(L"%S\n\0",inet_ntoa(ia));
ld->ipaddr=cstr; cstr.Empty();
cstr.Format(
L"%X%X-%X%X-%X%X-%X%X-%X%X-%X%X",
H4BIT(arphdr->sender_haaddr[0]),
L4BIT(arphdr->sender_haaddr[0]),
H4BIT(arphdr->sender_haaddr[1]),
L4BIT(arphdr->sender_haaddr[1]),
H4BIT(arphdr->sender_haaddr[2]),
L4BIT(arphdr->sender_haaddr[2]),
H4BIT(arphdr->sender_haaddr[3]),
L4BIT(arphdr->sender_haaddr[3]),
H4BIT(arphdr->sender_haaddr[4]),
L4BIT(arphdr->sender_haaddr[4]),
H4BIT(arphdr->sender_haaddr[5]),
L4BIT(arphdr->sender_haaddr[5])
); ld->mac=cstr; rq->push(ld);
}
}
一个mac的由6个byte组成 每一个byte 取它的 高4位和低4位 拼接起来 如 00