大家好,我现在有个问题都要死掉了  
本人对vc知道的非常有限,现在我有个问题  
我用vs.2003中vc++建了一个扩展存储过程,现在有个问题我都做了三天了,明天中午要再没答案我就玩完了。。  
呵呵。  
是这样的,在vc++编写的dll叫sql000的扩展存储过程使用的,有一个参数(sql2000调用这个dll函数时,代入的参数),在vb.net中我叫他string类型的,在vc中我也不知道应该叫什么类型,在vc中应该把这个参数定义成PBYTE 类型的,才能得到传入的参数,我现在有很多疑问  
PBYTE IP;//我定义的变量,是想代入IP地址  
1、我想把代入的参数变成const char* 类型的,也就是PBYTE 类型转const char*  
2.我用强类型转换,(char*)IP,总是怪怪的,不是后面是乱码,就是程序出错,主要程序如下:  
3.我建立的这个DLL,怎么设置断点,才能当sql2000调用这个dll时,能够中断.  
4.PBYTE变量怎么转换成long或int类型的,在下边的注释上了://特别问题2,因为我不会,害得我只能在程序中就固定了这个端口号,就是把转进来的参数能转换成long类型的, 不能象我这样用个常量  
4.特别问题1,在这个  
addrSrv.sin_addr.S_un.S_addr=inet_addr((char*)IP)语句中,如果把(char*)IP直接换成"192.168.1.3"这种常量形式,socket马上就能把数据发出去,如果不换,那么在sql2000调用这个dll的时候,必须得'192.168.1.3   '(也就是说,得多加几个空格上去才行),不然就出错  
     BYTE bType;     
  unsigned   long cbMaxLen;     
  unsigned   long cbActualLen;     
  BOOL   bfNull;   //   记录入参是否为空(NULL)        
  ULONG   ulMaxLen   =   20;   //   入参的最大长度,令为20字节     
  ULONG   ulActualLen=0;   //   入参的实际长度     
  PBYTE IP;     
  PBYTE PortNum;   
  if(srv_paraminfo(srvproc,   1,   &bType,   &cbMaxLen,   &cbActualLen,   NULL,   &bfNull)!=   SUCCEED)     
  {     
  wsprintf(spText,   "获得IP的类型、长度等信息发生错误");     
  srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0,   spText,   SRV_NULLTERM);     
  return   XP_ERROR;     
  }      IP   =   (PBYTE)::malloc(cbActualLen);  
 memset(IP,0,sizeof(IP));  
  if   (   IP   ==   NULL)     
  {     
  wsprintf(spText,   "为IP参数分配空间发生错误");     
  srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0,   spText,   SRV_NULLTERM);     
  return   XP_ERROR;     
  }     
  if   (   srv_paraminfo(srvproc,   1,   &bType,   &ulMaxLen,   &ulActualLen,   IP,   &bfNull)   !=   SUCCEED   )     
  {     
  wsprintf(spText,   "获得IP参数的值发生错误");     
  srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0,   spText,   SRV_NULLTERM);     
  return   XP_ERROR;     
  }     
  //   获得PortNum参数的类型、长度等信息     
  if(srv_paraminfo(srvproc,   2,   &bType,   &cbMaxLen,   &cbActualLen,   NULL,   &bfNull)!=   SUCCEED)     
  {     
  wsprintf(spText,   "获得PortNum参数的类型、长度等信息发生错误");     
  srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0,   spText,   SRV_NULLTERM);     
  return   XP_ERROR;     
  }     
   char error[10];   PortNum   =   (PBYTE)::malloc(cbActualLen);     
  if   (   PortNum   ==   NULL)     
  {     
  wsprintf(spText,   "为PortNum参数分配空间发生错误");     
  srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0,   spText,   SRV_NULLTERM);     
  return   XP_ERROR;     
  }     
  if   (   srv_paraminfo(srvproc,   2,   &bType,   &ulMaxLen,   &ulActualLen,   PortNum,   &bfNull)   !=   SUCCEED   )     
  {     
  wsprintf(spText,   "获得PortNum参数的值发生错误");     
  srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0,   spText,   SRV_NULLTERM);     
  return   XP_ERROR;     
  }    
//  
SOCKET   sockClient=socket(AF_INET,SOCK_STREAM,0);   
SOCKADDR_IN   addrSrv;   
//特别问题1:  
addrSrv.sin_addr.S_un.S_addr=inet_addr((char*)IP);   //显示ip地址,这里有时候就出现乱码  
srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0, (char*)IP ,   SRV_NULLTERM);     
addrSrv.sin_family=AF_INET;   
//特别问题2:  
addrSrv.sin_port=htons(5557);   if (connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))!=0)  
{  
 int errorcode=WSAGetLastError();  
    itoa(errorcode,error,10);  
srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0, "失败" ,   SRV_NULLTERM);     
srv_sendmsg(srvproc,   SRV_MSG_INFO,   0,   (DBTINYINT)0,   (DBTINYINT)0,   NULL,   0,   0, (char*)error ,   SRV_NULLTERM);     }  
send(sockClient,("开始传输:",strlen(("开始传输:")+1,0);   
closesocket(sockClient);   
return XP_NOERROR ;  
这个DLL主要目的是,把这个生成sql2000扩展存储过程所用的dll文件,然后,在sql2000的查询管理器中运行这个存储过程,并带入两个参数,一个是ip地址,一个是端口名  
各位爷爷奶奶,我真的不行了,给你跪下了,快帮我一下,我qq是   64246410  马上联系我,可以吗  
我就40分了,都拿来了