vc定义的结构体如下:
typedef struct trs_cmd
{
char CmdId;
char CmdLen[4+1];
char *CmdBuf;
}TRS_CMD;
int TRSbp_cmd(TRS_CMD *trs_cmd);在vb中该怎么做呀,请指教!
typedef struct trs_cmd
{
char CmdId;
char CmdLen[4+1];
char *CmdBuf;
}TRS_CMD;
int TRSbp_cmd(TRS_CMD *trs_cmd);在vb中该怎么做呀,请指教!
Dim CmdId As String
Dim CmdLen As String * 5
Dim CmdBuf As String
End TypeDim MyTRS_CMD As trs_cmdDeclare Function TRSbp_cmd Lib "yourdllname.dll" (ByDef TRS_CMD As Long) As Integer调用:Dim Result As Integer
Result=TRSbp_cmd(AddressOf MyTRS_CMD)
调用时,注意字符串用chr(0)来结尾。基本上我现在了解到的东西就是这样了吧。算不上是帮你解答,一起学习。
'{
' char CmdId;
' char CmdLen[4+1];
' char *CmdBuf;
'}TRS_CMD;
'int TRSbp_cmd(TRS_CMD *trs_cmd);Public Type TRS_CMD
CmdId As String '注意必须以Chr(0)结尾
CmdLen As String * 5 '注意必须以Chr(0)结尾
CmdBuf As String '注意必须以Chr(0)结尾
End TypePublic Declare Function TRSbp_cmd Lib "test.dll"(TRS_CMD As TRS_CMD) As Long楼上的,应该是ByRef,不是ByDef
我用的动态连接库名是Trsbp.dll 。
内含函数:TRSbp_cmd ,
函数原型:int TRSbp_cmd(TRS_CMD *trs_cmd,TRS_RESULT *trs_result);
主要参数:trs_cmd──命令结构体,trs_result──结果结构体。命令结构体TRS_CMD
定义
typedef struct trs_cmd
{
char CmdId;
char CmdLen[4+1];
char *CmdBuf;
}TRS_CMD;结果结构体TRS_RESULT
定义
typedef struct trs_result
{
char Status;
char Rows[4+1];
char Cols[4+1];
char ResultLen[8+1];
char *ResultBuf;
}TRS_RESULT;请朋友们帮忙!!!
说说是什么错误信息?还是返回的结果错误?
另外我想问一下,为什么总是定义 char Rows[4+1]; 而不直接用 char Rows[5]呢?有什么来历?
定义 char Rows[4+1]; 而不直接用 char Rows[5],没什么区别吧。这是给我动态连接库Trsbp.dll的人这样给我注明的。
另外要说的就是:结构引用中含有指针怎么处理啊?
在trs_result里面还有指针,并且这个指针是由动态连接库分配内存空间:
typedef struct trs_result
{
char Status;
char Rows[4+1];
char Cols[4+1];
char ResultLen[8+1];
char *ResultBuf;
}TRS_RESULT;
而VC不会自动进行边界对其,那些填充字节会搅乱正常的数据解决方案有两种:
1.自己写代码手动对其
2.修改原始声明1太麻烦了(处理一个元素就需要一行代码),建议使用2:
-----------------------------------------------------------/*将char改成BYTE是为了避免UniCode问题*/typedef struct trs_cmd
{
BYTE CmdId; //0
BYTE CmdLen[4+1]; //1
BYTE fillbytes[2];//6
BYTE *CmdBuf; //8(*CmdBuf是指针,在Win32下指针是32位——4字节)
}TRS_CMD;
int WINAPI TRSbp_cmd(TRS_CMD *trs_cmd); //VB只支持__stdcall协议的函数
typedef struct trs_result
{
BYTE Status; // 0
BYTE Rows[4+1]; // 1
BYTE Cols[4+1]; // 6
BYTE ResultLen[8+1];//11
char *ResultBuf; //20(正好对其)
}TRS_RESULT;
--------------------------------------------Private Type Declare Function TRSbp_cmd Lib "Trsbp.dll" (ByRef TRS_CMD As TRS_CMD, ByRef TRS_RESULT As TRS_RESULT) As LongPrivate Type TRS_CMD
CmdId As Byte
CmdLen(0 To 4) As Byte
CmdBuf As Long
End TypePrivate Type TRS_RESULT
Status As Byte
Rows(0 To 4) As Byte
Cols(0 To 4) As Byte
ResultLen(0 To 8) As Byte
ResultBuf As Long
End Type