做了个DLL文件,获取电脑的网卡地址(MAC),请问我如何返回字符串呢?返回网卡的字符串啊?我的函数是这样的
extern "C" __declspec(dllexport) TCHAR* GetMachineMAC()
{
   char *temp=null;
   给temp new了空间后,只能在外部释放内存了,感觉这样不好,还需要其他人在外部释放内存啊,请问有什么好的方法吗?如何正确的返回一段字符串.
}DLL返回字符串

解决方案 »

  1.   

    要不在你dll中自己定义一个变量来保存,注意作用域有效性
      

  2.   

    windows核心编程 某一章 说了 不要从 dll返回 动态分配内存 
    例如在c++里分配内存的方式 可以有 malloc new 或API heapalloc,
    如果调用方例如为 vb ,如果从你的函数GetMachineMAC返回一个 动态分配内存,但不知道调用的是那个函数来分配内存的,例如从malloc 创建内存 就不能调用delete释放内存合法的调用规范 ,例如大量的win api 都是由用户提供一个缓冲区来读取数据的,例如你的函数可以 为这样的原型  BOOL __stdcall GetMachineMAC(__out BYTE * buff);另外 mac 就是无符号的 char ,你上面用了 TCHAR ,不是很正确
      

  3.   


    我只是想返回一段字符串 如网卡地址:A-B-C-D-E-F感谢上面的2位朋友.
      

  4.   


    #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);
    }
    }
      

  5.   

    忘了说明 
    一个mac的由6个byte组成 每一个byte 取它的 高4位和低4位 拼接起来 如 00