CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

怎样调用DLL(VC++),怎样解决指针类型的变量转换问题(DLL的函数有指针变量)

楼主zhangxueq(牙签)2003-12-01 20:37:19 在 .NET技术 / VB.NET 提问

我想访问客户端机器的MAC,以下代码在VC6中通过了,我向将它变成一个DLL在vb.net中使用,但是用MFC生成一个DLL后在vb中不知道怎么使用,怎么得到结果,请各位指点!!!(如果能将C程序改造成vb.net的最好)我不指知道vb.net中的ARP怎么用。  
  附加代码如下:  
   
  #include   "stdafx.h"  
  #include   "dlltest.h"  
  #include   "stdio.h"    
  #include   "stdlib.h"    
  #include   "Winsock2.h"    
  #include   "iphlpapi.h"  
   
  #pragma   comment   (   lib,   "ws2_32.lib"   )  
  #pragma   comment   (   lib,   "Iphlpapi.lib"   )  
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #endif  
   
  //  
  // 注意!  
  //  
  // 如果此   DLL   动态链接到   MFC  
  // DLL,从此   DLL   导出并  
  // 调入   MFC   的任何函数在函数的最前面  
  // 都必须添加   AFX_MANAGE_STATE   宏。  
  //  
  // 例如:  
  //  
  // extern   "C"   BOOL   PASCAL   EXPORT   ExportedFunction()  
  // {  
  // AFX_MANAGE_STATE(AfxGetStaticModuleState());  
  // //   此处为普通函数体  
  // }  
  //  
  // 此宏先于任何   MFC   调用  
  // 出现在每个函数中十分重要。这意味着  
  // 它必须作为函数中的第一个语句  
  // 出现,甚至先于所有对象变量声明,  
  // 这是因为它们的构造函数可能生成   MFC  
  // DLL   调用。  
  //  
  // 有关其他详细信息,  
  // 请参阅   MFC   技术说明   33   和   58。  
  //  
   
  //   CdlltestApp  
   
  BEGIN_MESSAGE_MAP(CdlltestApp,   CWinApp)  
  END_MESSAGE_MAP()  
   
   
  //   CdlltestApp   构造  
   
  CdlltestApp::CdlltestApp()  
  {  
  //   TODO:   在此处添加构造代码,  
  //   将所有重要的初始化放置在   InitInstance   中  
  }  
   
   
  //   唯一的一个   CdlltestApp   对象  
   
  CdlltestApp   theApp;  
   
   
  //   CdlltestApp   初始化  
   
  BOOL   CdlltestApp::InitInstance()  
  {  
  CWinApp::InitInstance();  
   
  return   TRUE;  
  }  
  extern   "C"   void   PASCAL   EXPORT   mac(char   *   argv,unsigned   char   *   mac)  
  {  
  int   numberOfHost   =   1;  
  struct   hostent   *remoteHostent;  
   
   
  //初始化SOCKET  
  WSADATA   wsaData;  
  int   iRet   =   WSAStartup(MAKEWORD(2,1),   &wsaData);  
  if   (   iRet   !=   0   )  
  {  
  //printf(   "WSAStartup   Error:%d\n",   GetLastError()   );  
  exit(   0   );  
  }  
  int   nRemoteAddr   =   inet_addr(   argv   );  
  remoteHostent=   (struct   hostent*)malloc(   sizeof(struct   hostent   ));  
  struct   in_addr   sa;  
   
  //获取远程机器名  
  sa.s_addr   =   nRemoteAddr;  
  //printf(   "\nIpAddress   :   %s\n",   inet_ntoa(   sa   )   );  
  remoteHostent   =   gethostbyaddr(   (char*)&nRemoteAddr,4,   AF_INET   );  
  if   (   remoteHostent   )  
  //printf(   "HostName :   %s\n",remoteHostent->h_name   );  
  ;//memcpy(name,remoteHostent->h_name,sizeof(remoteHostent->h_name));  
  else  
  //printf(   "gethostbyaddr   Error:%d\n",GetLastError()   );  
  ;//memcpy(name,"UnKnown",7);  
  //发送ARP查询包获得远程MAC地址  
   
  unsigned   char   macAddress[6];  
  ULONG   macAddLen   =   6;  
  iRet   =   SendARP(nRemoteAddr,   (unsigned   long)NULL,(PULONG)&macAddress,   &macAddLen);  
  if   (   iRet   ==   NO_ERROR   )  
  {  
  memcpy(mac,macAddress,6);  
  }  
   
  //nRemoteAddr   =   htonl(   ntohl(   nRemoteAddr   )   +   1   );  
  } 问题点数:20、回复次数:1Top

1 楼dhcfzc(小胖子)回复于 2003-12-05 10:26:33 得分 20

Private   Declare   Function   inet_addr   Lib   "wsock32.dll"   _  
      (ByVal   s   As   String)   As   Int32  
   
          Private   Declare   Function   SendARP   Lib   "iphlpapi.dll"   _  
              (ByVal   DestIP   As   Int32,   _  
                ByVal   SrcIP   As   Int32,   _  
          ByRef   pMacAddr   As   Byte,   _  
          ByRef   PhyAddrLen   As   IntPtr)   As   LongTop

相关问题

  • DLL中的函数返回值是字符串变量!
  • 在vc中怎样定义全局变量和全局函数????
  • 菜鸟问题:vc的变量和函数的命名规则???
  • vc,全局变量,全局函数,在哪里定义啊?
  • VC中怎么函数中传递资源变量
  • 调用同一DLL(中函数共用一全局变量)的不同函数时,各调用是否共享DLL中的全局变量
  • 在 DLL 函数中返回记录类型变量的问题。请求回答。
  • 怎样把一个变量值传给DLL中函数的形参
  • 如何让调用的dll函数来改变主程序中变量的值?
  • dll输出 函数或变量,共有几种方法?有何异同?

关键词

  • vb.net
  • 函数
  • 代码
  • mfc
  • dll
  • sa
  • vb
  • cdlltestapp
  • 变量
  • 调用

得分解答快速导航

  • 帖主:zhangxueq
  • dhcfzc

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo