+ -
当前位置:首页 → 问答吧 → VB调用VC动态连接库DLL的问题,高手帮忙啊。

VB调用VC动态连接库DLL的问题,高手帮忙啊。

时间:2011-11-27

来源:互联网

》》》》》 VC中的DLL包含结构体和1个函数,如下:

typedef struct struValue
{
BYTE Type; // 'B'=布尔量,'R'=实型,'L'=整型,'S'=字符串
int property;  
int Timestamp;
CHAR Name[80+1]; 
CHAR Value[1024];
}MergedTagInfo;

const WORD c_MERGED_TAG_INFO_LEN = 84 + 1024 + 12;

typedef struct DEVICE_TO_SERVER_SEND_PACK {
WORD wType;
WORD wLen;
MergedTagInfo tagValue;
}SEND_PACK;

const WORD c_SEND_PACK = 2*sizeof(WORD)+c_MERGED_TAG_INFO_LEN;

typedef struct tagPackageHead {
WORD wType;
WORD wLen;
}PackageHead;


extern "C" __declspec(dllexport) BOOL __stdcall SendTagValue( MergedTagInfo *pValue);


》》》》》 在VB中调用如下:

Public Type struValue
  type As String * 1
  property As Long
  Timestamp As Long
  Name As String * 84
  Value As String * 200
End Type

Public Declare Function SendTagValue Lib "AlertSend.dll" Alias "_SendTagValue@4" (ByRef struValue As struValue) As Long


执行过程:
  Dim d_datetime As Date
  d_datetime = Format(Date, "YYYY-MM-DD") & " " & Format(Time, "hh:mm:ss")
   
  Dim tagname, tagvalue As String
  tagname = Trim(Text4.Text)
  tagvalue = Trim(Text5.Text)

  With va
  .type = "R"
  .property = 0
  .Timestamp = d_datetime
  .Name = tagname
  .Value = tagvalue
  End With
   
  Dim a As Long '定义返回值
  a = SendTagValue(va)


》》》》》 问题:
现在这样传进去后,为什么d_datetime时间传不对?还有就是NAME后跟着Value值,是不是缓冲区定义错了?

作者: sg163   发布时间: 2011-11-27

Public Declare Function SendTagValue Lib "AlertSend.dll" Alias "_SendTagValue@4" (ByRef struValue As long) As Long

作者: zzhgb   发布时间: 2011-11-27

楼上你这样的声明不对的,ByRef传入类型不符。

我那样的写法,结构变量的 Name As String * 84 和 Value As String * 200 这两个参数传过去后,最后会跟几个乱码,是不是分配空间分配的不对啊?

作者: sg163   发布时间: 2011-11-27

热门下载

更多