最近做项目用VB做了个管理界面,需要调用C程序编写的DLL函数,遇到问题如下:
C函数原型:
__declspec (dllexport) int WINAPI pwdencypt (char *merchant, char *oper, char *pos_id, char *inword, char *outword)
VB申明如下:
Declare Function pwdencypt Lib "pinkey.dll" (ByVal merchant As String, ByVal oper As String, ByVal pos_id As String, ByVal inword As String, outword As string) As Long
VB中调用如下:
Dim var1 As String
Dim var2 As String
Dim var3 As String
Dim var4 As String
Dim var5 As String*16
var1 = "105150252711111"
var2 = "8112"
var3 = "1112"
var4 = "111111"
Dim ret As Long
ret = pwdencypt(var1, var2, var3, var4, var5)
......
VB调用该函数希望得到var5的值,但程序执行到这里VB就崩溃了。我在函数pwdencypt中打印了日志,显示出var1, var2, var3, var4传入的值都正确,var5所对应的outword也有值了,而且都正确。但是VB总是崩溃,也检查了var5的长度,应该足够了。网上找了很多例子,都没有找到解决方案。求高手帮忙看看,在此谢谢了。
C函数原型:
__declspec (dllexport) int WINAPI pwdencypt (char *merchant, char *oper, char *pos_id, char *inword, char *outword)
VB申明如下:
Declare Function pwdencypt Lib "pinkey.dll" (ByVal merchant As String, ByVal oper As String, ByVal pos_id As String, ByVal inword As String, outword As string) As Long
VB中调用如下:
Dim var1 As String
Dim var2 As String
Dim var3 As String
Dim var4 As String
Dim var5 As String*16
var1 = "105150252711111"
var2 = "8112"
var3 = "1112"
var4 = "111111"
Dim ret As Long
ret = pwdencypt(var1, var2, var3, var4, var5)
......
VB调用该函数希望得到var5的值,但程序执行到这里VB就崩溃了。我在函数pwdencypt中打印了日志,显示出var1, var2, var3, var4传入的值都正确,var5所对应的outword也有值了,而且都正确。但是VB总是崩溃,也检查了var5的长度,应该足够了。网上找了很多例子,都没有找到解决方案。求高手帮忙看看,在此谢谢了。
传递的时候用ANY是不是就不会出错了?
也试过把声明换位as any,但都是同样的结果。
extern "C" long WINAPI
我们的都是这样定义的,像你在VB中这样的声明没有问题。
http://topic.csdn.net/T/20060307/16/4598697.html
http://topic.csdn.net/T/20060305/22/4594229.html
我把C的原型改为__declspec (dllexport) int WINAPI pwdencypt (char *merchant, char *oper, char *pos_id, char *inword, char **outword),即要返回的变量多了一个“*”,相应地改了一下程序,最后终于成功返回了。谢谢。