Private Type CardInfo
XH As String * 33
CardID As String * 33
XI As String * 10
BJ As String * 20
XM As String * 20
XB As String * 4
CardIDL As Long
End Type用VB定义的结构体如上,然后定义一个实例
Dim kk as CardInfoBCB动态链接库函数为int ReadCard_ETest(HCardInfo *CI)
{
CI->CardIDL=0;
char xh[]="abcdefghij";
char id[]="abcdefghijklmnopqrstuvwxyz";
char xm[]="abcdefghij";
char xb[]="ab";
char xi[]="abcdefghij";
char bj[]="abcdefghij";
strcpy(CI->XH,xh);
strcpy(CI->CardID,id);
strcpy(CI->XI,xi);
strcpy(CI->BJ,bj);
strcpy(CI->XM,xm);
strcpy(CI->XB,xb);
return 0;
}
就只是给传进来的结构体赋值
调用BCB函数ReadCard_ETestDLL后 a = ReadCard_ETestDLL(kk)
MsgBox "BJ:" & kk.BJ
MsgBox "CardID:" & kk.CardID
MsgBox "XB:" & kk.XB
MsgBox "XH:" & kk.XH
MsgBox "XI:" & kk.XI
MsgBox "XM:" & kk.XM
为什么只有XH,CardID,XI正常,
其他的BJ是bcd...第一个字符没了
XB是def...前三个没了
XM是cde...前两个没了
不知道为什么
而此函数在BCB下用正常,请教大侠
XH As String * 33
CardID As String * 33
XI As String * 10
BJ As String * 20
XM As String * 20
XB As String * 4
CardIDL As Long
End Type用VB定义的结构体如上,然后定义一个实例
Dim kk as CardInfoBCB动态链接库函数为int ReadCard_ETest(HCardInfo *CI)
{
CI->CardIDL=0;
char xh[]="abcdefghij";
char id[]="abcdefghijklmnopqrstuvwxyz";
char xm[]="abcdefghij";
char xb[]="ab";
char xi[]="abcdefghij";
char bj[]="abcdefghij";
strcpy(CI->XH,xh);
strcpy(CI->CardID,id);
strcpy(CI->XI,xi);
strcpy(CI->BJ,bj);
strcpy(CI->XM,xm);
strcpy(CI->XB,xb);
return 0;
}
就只是给传进来的结构体赋值
调用BCB函数ReadCard_ETestDLL后 a = ReadCard_ETestDLL(kk)
MsgBox "BJ:" & kk.BJ
MsgBox "CardID:" & kk.CardID
MsgBox "XB:" & kk.XB
MsgBox "XH:" & kk.XH
MsgBox "XI:" & kk.XI
MsgBox "XM:" & kk.XM
为什么只有XH,CardID,XI正常,
其他的BJ是bcd...第一个字符没了
XB是def...前三个没了
XM是cde...前两个没了
不知道为什么
而此函数在BCB下用正常,请教大侠
解决方案 »
- 这种代码怎么写?
- 如何用VB将应用程序图标放到系统托盘?
- VB+ActiveReport2.0打包时,为了能使用activereport2.0中做的报表能正常运行,完整打包要打哪些有关activereport报表的相关文件?
- 求助: 下面这段代码有什么问题吗?
- 关于datagrid的问题,各位帮解决一下
- 使用VB如何开发网络游戏外挂
- 请问用VB编程访问ORACLE该怎么做?急!请帮忙!
- DAO编程,代码那里错了??
- 急:是否使用VBA打开PPT中一页,并可以用其他语言调用,如java等
- 数据保存
- 这样格式的EXCEL 如何将它的内容导入到 ACCESS中
- 新人第一次报道,请教各位些问题,谢了!
我照你说的把所以的换成as Byte格式,可是现在还是只有XH,CardID,XI正常,其他的一个都没了,我不知道,这些定义都一样为什么XH,等可以其他的不行呢
Private Declare Function ReadCard_TestDLL Lib "NDCard.dll" (ComHandle As Long, CardID As String, CardIDL As Long, XH As String, XM As String, XB As String, XI As String, BJ As String) As Integer
Private Sub Command2_Click()
Dim s As String
a = ReadCard_ETestDLL(kk)
MsgBox "XM:" & kk.XM
MsgBox "XI:" & kk.XI
MsgBox "BJ:" & kk.BJ
MsgBox "CardID:" & kk.CardID
MsgBox "XB:" & kk.XB
MsgBox "XH:" & kk.XH
MsgBox "XM:" & kk.XM
End SubPrivate Sub Command4_Click()
Dim XHa As String * 33
Dim CardIDa As String * 33
Dim XIa As String * 17
Dim BJa As String * 17
Dim XMa As String * 17
Dim XBa As String * 4
Dim CardIDLa As Long
a = ReadCard_TestDLL(CardIDa, CardIDLa, XHa, XMa, XBa, XIa, BJa)
MsgBox a
MsgBox "XM:" & XMa
MsgBox "XI:" & XIa
MsgBox "BJ:" & BJa
MsgBox "CardID:" & CardIDa
MsgBox "XB:" & XBa
MsgBox "XH:" & XHa
End Sub
就是这样了,那个ReadCard_TestDLL和上面的ReadCard_ETestDLL 最终调用的都是DLL里那个函数的,但是好像传入结构体的那个只有XH和CARDID,XI有返回值,其他的没有返回值的,ReadCard_TestDLL返回后就是我说的从第二个或者第三个开始读的
Private Type CardInfo
XH(32) As Byte
CardID(32) As Byte
XI(9) As Byte
BJ(19) As Byte
XM(19) As Byte
XB(3) As Byte
CardIDL As Long
End TypePrivate Declare Function ReadCard_ETestDLL Lib "NDCard.dll" (ByRef Sxh As CardInfo) As Long
Private Declare Function ReadCard_TestDLL Lib "NDCard.dll" (ByVal ComHandle As Long, ByVal CardID As String, CardIDL As Long, ByVal XH As String, ByVal XM As String, ByVal XB As String, ByVal XI As String, ByVal BJ As String) As Integer
s = StrConv(kk.XH, vbUnicode)
MsgBox "XH:" & s
另外我第二个传进去的是个地址,照您那样声明不行吧怎么加分
{
unsigned char XH[33];
unsigned char CardID[33];
unsigned char XI[17];
unsigned char BJ[17];
unsigned char XM[17];
unsigned char XB[4];
unsigned long CardIDL;
}HCardInfo;我在BCB的DLL里加了一个CPP,和.h。这个结构体在.h中定义的,ReadCard_ETest这个函数在.cpp里,在DLL主程序里有个函数引用.cpp里的ReadCard_ETest。而VB调用的这个实际上是调用DLL里主程序里的,然后主程序里的这个函数又去调用的.hpp里的ReadCard_ETest。太乱不知道大哥能否看明白的
private type CardInfo
XH(32) as byte
CardID(32) as byte
XI(16) as byte
BJ(16) as byte
XM(16) as byte
XB(3) as byte
CardIDL as long
end type
extern "C"
{
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
__declspec(dllexport) int __stdcall ETest(char * CardID,unsigned long *CardIDL,char *XH,char *XM,char *XB,char *XI,char *BJ)
{
CardIDL=0;
char xh[]="abcdefghxh";
char id[]="abcdefghijklmnopqrstuvwxyzid";
char xm[]="abcdefghxm";
char xb[]="xb";
char xi[]="abcdefghxi";
char bj[]="abcdefghbj";
strcpy(BJ,bj);
strcpy(XM,xm);
strcpy(XB,xb);
strcpy(XH,xh);
strcpy(CardID,id);
strcpy(XI,xi);
return 6;
}
}
这个是BCB动态链接库的
Private Declare Function ETest Lib "C:\Documents and Settings\Administrator\桌面\VSNET\VB\NewBCBVB\BCB\Project2.dll" (CardID As String, CardIDL As Long, XH As String, XM As String, XB As String, XI As String, BJ As String) As Integer
Private Sub Command4_Click()
Dim XHa As String * 33
Dim CardIDa As String * 33
Dim XIa As String * 33
Dim BJa As String * 33
Dim XMa As String * 33
Dim XBa As String * 33
Dim CardIDLa As Long
a = ETest(CardIDa, CardIDLa, XHa, XMa, XBa, XIa, BJa)
MsgBox a
MsgBox "XM:" & XMa
MsgBox "XI:" & XIa
MsgBox "BJ:" & BJa
MsgBox "CardID:" & CardIDa
MsgBox "XB:" & XBa
MsgBox "XH:" & XHa
MsgBox CardIDL
End Sub
Private Sub Command5_Click()
Dim XH As String
Dim CardID As String
Dim XI As String
Dim BJ As String
Dim XM As String
Dim XB As String
Dim CardIDL As Long
a = ETest(CardID, CardIDL, XH, XM, XB, XI, BJ)
MsgBox a
s = StrConv(XI, vbUnicode)
MsgBox "XI:" & s
s = StrConv(BJ, vbUnicode)
MsgBox "BJ:" & s
s = StrConv(CardID, vbUnicode)
MsgBox "CardID:" & s
s = StrConv(XB, vbUnicode)
MsgBox "XB:" & s
s = StrConv(XH, vbUnicode)
MsgBox "XH:" & s
s = StrConv(XM, vbUnicode)
MsgBox "XM:" & s
MsgBox CardIDL
End Sub
这个是VB调用的char CardID[33],XH[33],XM[33],XB[33],XI[33],BJ[33];
unsigned long CardIDL=0;
ShowMessage(ETest(CardID,&CardIDL,XH,XM,XB,XI,BJ));
ShowMessage("CardID:"+AnsiString(CardID));
ShowMessage("CardIDL:"+AnsiString(CardIDL));
ShowMessage("XH:"+AnsiString(XH));
ShowMessage("XM:"+AnsiString(XM));
ShowMessage("XB:"+AnsiString(XB));
ShowMessage("XI:"+AnsiString(XI));
ShowMessage("BJ:"+AnsiString(BJ));
这个是BCB调用的,用BCB调用的没有错误用VB调用的,会弹出框,内存错误吧,另外我用XH(33) AS BYTE的在编译都出错的,大哥帮我看看怎么回事吧
{
unsigned char XH[33];
unsigned char CardID[33];
unsigned char XI[17];
unsigned char BJ[17];
unsigned char XM[17];
unsigned char XB[4];
unsigned long CardIDL;
}HCardInfo;int __stdcall ReadCard_ETest(HCardInfo *CI)
{
CI->CardIDL=0;
char xh[]="abcdefghij";
char id[]="abcdefghijklmnopqrstuvwxyz";
char xm[]="abcdefghij";
char xb[]="ab";
char xi[]="abcdefghij";
char bj[]="abcdefghij";
strcpy((char*)CI->XH,xh);
strcpy((char*)CI->CardID,id);
strcpy((char*)CI->XI,xi);
strcpy((char*)CI->BJ,bj);
strcpy((char*)CI->XM,xm);
strcpy((char*)CI->XB,xb);
return 0;
}Private Declare Function ReadCard_ETest Lib "D:\我的程序\CallTest\Debug\calltest.dll" (Sxh As CardInfo) As LongPrivate Type CardInfo
XH(32) As Byte
CardID(32) As Byte
XI(16) As Byte
BJ(16) As Byte
XM(16) As Byte
XB(3) As Byte
CardIDL As Long
End TypePrivate Sub Form_Load()
Dim x As CardInfo
Debug.Print ReadCard_ETest(x)
Debug.Print StrConv(x.BJ, vbUnicode)
End Sub
最后一个问题,怎么加分的