做了个DLL文件,获取电脑的网卡地址(MAC),请问我如何返回字符串呢?

华美乐章 2013-02-21 03:25:08
做了个DLL文件,获取电脑的网卡地址(MAC),请问我如何返回字符串呢?返回网卡的字符串啊?

我的函数是这样的
extern "C" __declspec(dllexport) TCHAR* GetMachineMAC()
{
char *temp=null;
给temp new了空间后,只能在外部释放内存了,感觉这样不好,还需要其他人在外部释放内存啊,请问有什么好的方法吗?如何正确的返回一段字符串.
}
...全文
242 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcorange 2013-02-21
  • 打赏
  • 举报
回复
忘了说明 一个mac的由6个byte组成 每一个byte 取它的 高4位和低4位 拼接起来 如 00
vcorange 2013-02-21
  • 打赏
  • 举报
回复
#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); } }
华美乐章 2013-02-21
  • 打赏
  • 举报
回复
引用 3 楼 vcorange 的回复:
windows核心编程 某一章 说了 不要从 dll返回 动态分配内存 例如在c++里分配内存的方式 可以有 malloc new 或API heapalloc, 如果调用方例如为 vb ,如果从你的函数GetMachineMAC返回一个 动态分配内存,但不知道调用的是那个函数来分配内存的,例如从malloc 创建内存 就不能调用delete释放内存 合法的调用规范 ,例如大量的win……
我只是想返回一段字符串 如网卡地址:A-B-C-D-E-F 感谢上面的2位朋友.
vcorange 2013-02-21
  • 打赏
  • 举报
回复
windows核心编程 某一章 说了 不要从 dll返回 动态分配内存 例如在c++里分配内存的方式 可以有 malloc new 或API heapalloc, 如果调用方例如为 vb ,如果从你的函数GetMachineMAC返回一个 动态分配内存,但不知道调用的是那个函数来分配内存的,例如从malloc 创建内存 就不能调用delete释放内存 合法的调用规范 ,例如大量的win api 都是由用户提供一个缓冲区来读取数据的, 例如你的函数可以 为这样的原型 BOOL __stdcall GetMachineMAC(__out BYTE * buff); 另外 mac 就是无符号的 char ,你上面用了 TCHAR ,不是很正确
Eleven 2013-02-21
  • 打赏
  • 举报
回复
要不在你dll中自己定义一个变量来保存,注意作用域有效性
Eleven 2013-02-21
  • 打赏
  • 举报
回复
最好的原则是谁分配谁释放 要不修改接口,将需要的参数传递给接口函数可能比较好。

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧