64,650
社区成员
发帖
与我相关
我的任务
分享
// smzfGetMac.cpp : 定义 DLL 应用程序的导出函数。
#include "stdafx.h"
#include<atlbase.h>
#include<atlconv.h>
#include <Iphlpapi.h>
#pragma comment (lib,"Iphlpapi.lib")
using namespace std;
// 这是导出函数的一个示例。
char mac[100], * lpmac;
void getMac(){
printf("进入DLL方法\n");
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter=NULL;
DWORD dwRetVal=0;
pAdapterInfo=(IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen=sizeof(IP_ADAPTER_INFO);
if(GetAdaptersInfo(pAdapterInfo,&ulOutBufLen)!=ERROR_SUCCESS)
{
GlobalFree(pAdapterInfo);
pAdapterInfo=(IP_ADAPTER_INFO*)malloc(ulOutBufLen);
}
GetAdaptersInfo(pAdapterInfo,&ulOutBufLen);
pAdapter=pAdapterInfo;
bool _IsConnect=false;
while(pAdapter)
{
if(strstr(pAdapter->Description,"VMware")<=0){
MIB_IFROW Info ;
memset(&Info ,0 ,sizeof(MIB_IFROW)) ;
Info.dwIndex=pAdapter->Index;
if(GetIfEntry(&Info) != NO_ERROR){
}
switch(Info.dwOperStatus)
{
case IF_OPER_STATUS_NON_OPERATIONAL :
break;
case IF_OPER_STATUS_OPERATIONAL:
sprintf_s(mac,"%02X-%02X-%02X-%02X-%02X-%02X",
pAdapter->Address[0],
pAdapter->Address[1],
pAdapter->Address[2],
pAdapter->Address[3],
pAdapter->Address[4],
pAdapter->Address[5]);
lpmac=mac;
break;
default:
break;
}
}
pAdapter=pAdapter->Next;
}
free(pAdapterInfo);
free(pAdapter);
}
extern "C" __declspec(dllexport) char * __getMac()
{
getMac();
return lpmac;
}
BSTR CgetMacOCXCtrl::Get_MacAddress(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString strResult;
typedef char* (*Dllfun)();
Dllfun __getMac;
HINSTANCE hdll;
hdll=LoadLibrary("smzfGetMac.dll");
if(hdll==NULL)
{
FreeLibrary(hdll);
}
__getMac=(Dllfun)GetProcAddress(hdll,"__getMac");
if(__getMac==NULL)
{
FreeLibrary(hdll);
}
char * lpmac;
lpmac=(char * )__getMac();
FreeLibrary(hdll);
strResult=lpmac;
// TODO: 在此添加调度处理程序代码
return strResult.AllocSysString();
}
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "afxdialogex.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
typedef char* (*Dllfun)();
Dllfun __getMac;
HINSTANCE hdll;
hdll=LoadLibrary("smzfGetMac.dll");
if(hdll==NULL)
{
FreeLibrary(hdll);
}
__getMac=(Dllfun)GetProcAddress(hdll,"__getMac");
if(__getMac==NULL)
{
FreeLibrary(hdll);
}
CString strResult;
char * lpmac;
lpmac=(char *)__getMac();
printf("%s\n",lpmac);
strResult=lpmac;
FreeLibrary(hdll);
printf("%s",strResult);
getchar();
return 0;
}
BSTR CgetMacOCXCtrl::Get_MacAddress(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
typedef char* (*Dllfun)();
Dllfun __getMac;
HINSTANCE hdll;
hdll=LoadLibrary("smzfGetMac.dll");
if(hdll==NULL)
{
FreeLibrary(hdll);
}
__getMac=(Dllfun)GetProcAddress(hdll,"__getMac");
if(__getMac==NULL)
{
FreeLibrary(hdll);
}
char * lpmac=new char[100];
memset(lpmac,0,100*sizeof(char));
lpmac=(char * )__getMac();
CString strResult;
strResult=lpmac;
//AfxMessageBox(strResult);
// TODO: 在此添加调度处理程序代码
FreeLibrary(hdll);
return strResult.AllocSysString();
}
搞定了!谢谢楼上的!