我必须用VB6调用C DLL。
C代码
short int decode(BOOL Mode, char* tete, char* adresse, char* status, char* nombre, char* datadecode);
我的VB代码:
Private Declare Function decode Lib "VBdecode.dll" ( _
ByVal Mode As Long, _
ByVal tete As String, _
ByVal adresse As String, _
ByVal status As String, _
ByVal nombre As String, _
ByVal datadecode As String) As Long
Dim retour_lire As Long
Dim buffer(4) As Byte
Dim vbcData as string
Dim i As Integer
Dim chdecode As string
retour_lire = Byte_read(True, "4", "00", buffer, "16", vbcData)
For i = 1 To 10
chdecode = vbcData(i)
Next
MsgBox chdecode
但我的VB6代码无效。
请任何想法,任何建议或更正。
请帮助我,我依靠你。答案 0 :(得分:0)
评论实际上是错误的。你是对的。 VB6会将String
s(无论如何以这种方式发送)转换为char*
。如果您使用的是VarPtr()
或使用As Any
,那么它们就是正确的。
您的问题是返回值。将C ++端的short int
更改为int
或将VB6端的As Long
更改为As Integer
。
所以:
int decode(BOOL Mode, char* tete, char* adresse, char* status, char* nombre, char* datadecode);
或:
Private Declare Function decode Lib "VBdecode.dll" ( _
ByVal Mode As Long, _
ByVal tete As String, _
ByVal adresse As String, _
ByVal status As String, _
ByVal nombre As String, _
ByVal datadecode As String) As Integer
不是两个:)!
值得注意的是,您的示例代码实际上并未实际调用decode()
。所以另一个问题,这只是一个猜测,是你试图改变C ++方面的字符串的内容。您可以对字符串进行更改,但无法重新分配。所以你需要让它已经大小(使用Space$()
)。