我用VC 写了个MFC Appzard的扩展dll,如下: 
extern "C" __declspec(dllexport) ULONG GetIp() 

WSADATA  wsaData;    
if(WSAStartup(0x0101,&wsaData))  
{  
printf("WSAStartup failed %s\n",WSAGetLastError());  
return 0;  
}  
ULONG  lip = 0; 
char szHostName[50]={0}; 
char ip[50]={0}; 
gethostname(szHostName,sizeof(szHostName)); 
LPHOSTENT lpHost = gethostbyname(szHostName); 
if(WSANO_DATA == WSAGetLastError()) 

CString szMsg; 
szMsg.Format("WSANO_DATA ERROR :%d",WSAGetLastError()); 
printf("%s",szMsg); 
return 0; 

strcpy(ip,inet_ntoa(*(struct in_addr*)(*lpHost->h_addr_list))); 
lip = inet_addr(ip); 
printf("ComFun %s,%d",ip,lip); 
WSACleanup(); 
return lip; 

然后用ddk又写了个驱动程序,是纯C语言写的。想在NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) 
入口函数中调用GetIp函数,我是这么写的 #pragma comment(lib,"ComFun.lib") 
extern  "C" __declspec(dllexport) ULONG GetIp(); 
ULONG g_ip=0; 可是在调用g_ip = GetIp()时候提示错误 
1.error C2059: syntax error : 'string'  //错误出现在 extern  "C" __declspec(dllexport) ULONG GetIp(); 这一行 
2.warning C4013: 'GetIp' undefined; assuming extern returning int 

解决方案 »

  1.   

     你的想法很单纯 呵呵,驱动使用mfc 嗯或许未来会可以的!
    要知道 驱动里面使用api都要转换为zw或者nt系列 呵呵
      

  2.   

    其实应该可以的,但绝对不是像__declspec(dllexport)那样就可以调用,需要用apc,调用门切换的,极其复杂,而且只能执行一小段代码,楼主还是用DeviceIOControl交互吧,方便稳定...
      

  3.   

    挂APC让用户级程序监听,或者用KEVENT对象与DeviceIoControl交互,随便把用户级的代码直接放内核去跑,首先普通的API就不能用,哪搞不好出问题就蓝屏了
      

  4.   

    用进程与驱动通信吧。用DeviceIoControl接收到驱动发的消息然后再调用。
      

  5.   

    楼主的做法根本是错误的,即使做出来了也是 不被推荐的做法。楼主应该,直接在MFC程序里面 获取IP,然偶通过 DeviceIoControl将 这个IP四字节 传递给 驱动程序,保存在驱动的一个全局变量里面
      

  6.   

    跪求驱动高手 帮菜鸟答疑
    http://topic.csdn.net/u/20110806/21/df2f30e4-25e1-4de0-a849-6957ab48bc79.html?39781