1.2 BUSINESS_HANDLE 业务函数
1.2.1 语法规则 Syntax:
对外提供接口:
SiInterface.dll
int WINAPI BUSINESS_HANDLE(const char* inputData,
char* outputData)
输入参数:inputData
输出参数:outputData char*
返回值: 成功 0 失败 -1
输入参数是以“^、$、|”分割的字符串
输出也是以“^”“@、^、$、|”分割的字符串
我在调用DLL的时候是这样写的:
Public Class DLLImports
<DllImport("SiInterface.dll", EntryPoint:="INIT")> Public Shared Function INIT(ByVal OutputInfo As String) As Integer
End Function
<DllImport("SiInterface.dll", EntryPoint:="BUSINESS_HANDLE")> Public Shared Function BUSINESS_HANDLE(ByVal inputData As String, <Out> ByVal outputData As String) As Integer
End Function
End Class
在程序中测试调用DLL中的函数是这样写的:
Dim inputdata As String
Dim l_outputdata As String
Dim result As Integer
inputdata = "9100^H129^0037^^2007010^^|^"
l_outputdata = Space(100)
result = BUSINESS_HANDLE(inputdata, l_outputdata)
If result <> 0 Then
System.Console.WriteLine("医保返回值:" & l_outputdata)
End If
System.Console.WriteLine("返回值:" & result)
现在出现的问题是这样的: 在调用这个动态库中的函数的时候会有一个输出的日志,调用时可以正常运行,但是调用BUSINESS_HANDLE(const char* inputData, char* outputData)函数中的输出参数的时候,不能正确显示出输出参数中的内容,我 不知道是我调用的方法不对还是怎样?请各位高手指点一下!谢谢!
5 个解决方案
#2
补充一点:outputdata是输出参数,即当调用dll中BUSINESS_HANDLE(const char* inputData, char* outputData)函数完成后,这个函数不但会返回一个integer的整数,还会封装一个字符串通过outputData返回,我现在是想调用outputData里的值
#3
同问:
楼主会了吗,有时间贴出来呗。我也在做这个,调用C++写的dll,我用的是vb.net2010
楼主会了吗,有时间贴出来呗。我也在做这个,调用C++写的dll,我用的是vb.net2010
#4
正常函数的返回值是没问题的,只是这个函数里有一个传出参数,不知道怎么调用这个传出函数
#5
已经解决了,虽然楼上的各位没能解决,但是十分感谢!应3楼要求,贴出我的代码:
调用Dll文件,需要注意的是要导入System.Runtime.InteropServices和System.Text:
<DllImport("SiInterface.dll", EntryPoint:="INIT")> Public Shared Function INIT(ByVal OutputInfo As String) As Integer
End Function
<DllImport("SiInterface.dll", EntryPoint:="BUSINESS_HANDLE")> Public Shared Function BUSINESS_HANDLE(ByVal inputData As String, <Out> ByVal outputData As StringBuilder) As Integer
End Function
调用DLL中函数,并读取函数中的传出函数代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim inputdata As String
' Dim l_outputdata As String
Dim l_outputdata As New Stringbuilder()
Dim result As Integer
' l_outputdata = Nothing
inputdata = Space(10240)
inputdata = "9100^H129^0037^^2007010^^|^"
l_outputdata.Capacity = 1024
System.Console.WriteLine("输入值:" & inputdata)
result = BUSINESS_HANDLE(inputdata, l_outputdata)
If result <> 0 Then
System.Console.WriteLine("医保返回值:" & l_outputdata.ToString())
End If
System.Console.WriteLine("返回值:" & result)
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub
运行结果:
输入值:9100^H129^0037^^2007010^^|^
医保返回值:^^执行EapAgent_SendRequest()时错误.请检查网络连接状况!^
返回值:-4
#1
#2
补充一点:outputdata是输出参数,即当调用dll中BUSINESS_HANDLE(const char* inputData, char* outputData)函数完成后,这个函数不但会返回一个integer的整数,还会封装一个字符串通过outputData返回,我现在是想调用outputData里的值
#3
同问:
楼主会了吗,有时间贴出来呗。我也在做这个,调用C++写的dll,我用的是vb.net2010
楼主会了吗,有时间贴出来呗。我也在做这个,调用C++写的dll,我用的是vb.net2010
#4
正常函数的返回值是没问题的,只是这个函数里有一个传出参数,不知道怎么调用这个传出函数
#5
已经解决了,虽然楼上的各位没能解决,但是十分感谢!应3楼要求,贴出我的代码:
调用Dll文件,需要注意的是要导入System.Runtime.InteropServices和System.Text:
<DllImport("SiInterface.dll", EntryPoint:="INIT")> Public Shared Function INIT(ByVal OutputInfo As String) As Integer
End Function
<DllImport("SiInterface.dll", EntryPoint:="BUSINESS_HANDLE")> Public Shared Function BUSINESS_HANDLE(ByVal inputData As String, <Out> ByVal outputData As StringBuilder) As Integer
End Function
调用DLL中函数,并读取函数中的传出函数代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim inputdata As String
' Dim l_outputdata As String
Dim l_outputdata As New Stringbuilder()
Dim result As Integer
' l_outputdata = Nothing
inputdata = Space(10240)
inputdata = "9100^H129^0037^^2007010^^|^"
l_outputdata.Capacity = 1024
System.Console.WriteLine("输入值:" & inputdata)
result = BUSINESS_HANDLE(inputdata, l_outputdata)
If result <> 0 Then
System.Console.WriteLine("医保返回值:" & l_outputdata.ToString())
End If
System.Console.WriteLine("返回值:" & result)
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try
End Sub
运行结果:
输入值:9100^H129^0037^^2007010^^|^
医保返回值:^^执行EapAgent_SendRequest()时错误.请检查网络连接状况!^
返回值:-4