![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
vb调用DLL返回的字符有问题,请高手帮助,谢谢
'extern"C"MYAPICOMDLL_APIint_stdcallRecvChar(char*data,int&OutNum)'{//输出参数OutNum必须加&,...
'extern "C" MYAPICOMDLL_API int _stdcall RecvChar(char *data,int &OutNum)
' {//输出参数OutNum必须加&,VB调用中必须用ByRef并且定义为long,否则引起错误,
' //VB的返回参数必须定义为space(N),其中N>OutNum,否则VB调用时出现自动化(Automation)错误,80010108,死机
' char CCC[]="ZZQOK";
' const int TempNum=100;
' OutNum=strlen(CCC);
' strcpy(data,"ZZQOK");
' return 1;}
'Public Declare Function RecvChar Lib "MyApiComDll.DLL" (ByVal MyOut As String, ByRef MyOutNum As Long) As Integer '测试之用OK
Public Sub TestReciveChar() '“结果OK”无法显示???,其他均正常
Dim MyOut As String, MyOutStr As String, MyOutNum As Long, ReturnData As Integer
Call TestChar
MyOut = VBA.Space(10) ''''若不定义,调用DLL时出现自动化(Automation)错误,80010108,死机
ReturnData = RecvChar(MyOut, MyOutNum)
MsgBox "参数返回值=" & MyOutNum & "传递实际字符长度为:" & Len(MyOut) & "个,MyOut=" & MyOut & ",结果OK" '''“结果OK”无法显示???
End Sub
Public Sub TestChar() ''''OK
Dim TestChar As String, MyOut As String
TestChar = "AAASSSDDD"
MyOut = VBA.Space(100)
MyOut = TestChar
MsgBox "传递实际字符长度为:" & Len(MyOut) & "个,MyOut=" & MyOut & ",结果OK"
End Sub
请高手帮助,为何TestReciveChar不正常,但TestChar却正常
我也想到可是行尾出现问题,但如何处理,能帮我修改吗?谢谢 展开
' {//输出参数OutNum必须加&,VB调用中必须用ByRef并且定义为long,否则引起错误,
' //VB的返回参数必须定义为space(N),其中N>OutNum,否则VB调用时出现自动化(Automation)错误,80010108,死机
' char CCC[]="ZZQOK";
' const int TempNum=100;
' OutNum=strlen(CCC);
' strcpy(data,"ZZQOK");
' return 1;}
'Public Declare Function RecvChar Lib "MyApiComDll.DLL" (ByVal MyOut As String, ByRef MyOutNum As Long) As Integer '测试之用OK
Public Sub TestReciveChar() '“结果OK”无法显示???,其他均正常
Dim MyOut As String, MyOutStr As String, MyOutNum As Long, ReturnData As Integer
Call TestChar
MyOut = VBA.Space(10) ''''若不定义,调用DLL时出现自动化(Automation)错误,80010108,死机
ReturnData = RecvChar(MyOut, MyOutNum)
MsgBox "参数返回值=" & MyOutNum & "传递实际字符长度为:" & Len(MyOut) & "个,MyOut=" & MyOut & ",结果OK" '''“结果OK”无法显示???
End Sub
Public Sub TestChar() ''''OK
Dim TestChar As String, MyOut As String
TestChar = "AAASSSDDD"
MyOut = VBA.Space(100)
MyOut = TestChar
MsgBox "传递实际字符长度为:" & Len(MyOut) & "个,MyOut=" & MyOut & ",结果OK"
End Sub
请高手帮助,为何TestReciveChar不正常,但TestChar却正常
我也想到可是行尾出现问题,但如何处理,能帮我修改吗?谢谢 展开
2个回答
2014-10-30
展开全部
在vb的字符串类型上,c中没有字符串,其实用的是字符数吵旦饥组,数组结尾为ascii的0,上述C语言定义的参数 char *data,其实可以理解为是单个字节的字符串,但是VB的迟世string 字符串不一定每个字符占有一个字节,vb中的char是2个字节的,所以可以声明为byte()数组的形式,然后再处理chr(byte())转换成字符升返
有问题追问
有问题追问
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
MyOut返回应该有问题,查检MyOut串的行尾,进行处理。
ReturnData = RecvChar(MyOut, MyOutNum)
myout=replace(myout,chr(0),"")'测试一下。。衡晌。。。。。。。。
MsgBox "参数返回值=" & MyOutNum & "传雹首递实际字符长度为:" & Len(MyOut) & "个,MyOut=" & MyOut & ",结果OK" '''“源拦数结果OK”无法显示???
ReturnData = RecvChar(MyOut, MyOutNum)
myout=replace(myout,chr(0),"")'测试一下。。衡晌。。。。。。。。
MsgBox "参数返回值=" & MyOutNum & "传雹首递实际字符长度为:" & Len(MyOut) & "个,MyOut=" & MyOut & ",结果OK" '''“源拦数结果OK”无法显示???
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询