如何从VB6中的指针获取String

时间:2013-09-01 20:59:18

标签: c string dll vb6 bstr

我必须用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代码无效。

请任何想法,任何建议或更正。

请帮助我,我依靠你。

1 个答案:

答案 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$())。