delphi中的pchar型 与vb中哪一种类型符合 ( 积分: 100 )

  • 主题发起人 主题发起人 sakas
  • 开始时间 开始时间
S

sakas

Unregistered / Unconfirmed
GUEST, unregistred user!
如题: 谢谢
 
如题: 谢谢
 
字符串呗
Another_eYes (1999-07-31 22:45:00)
呵呵, in Delphi:
Pchar 表示pointer, 接受到的只是一个32位数, 指向具体的由#0结尾的字符串.
var表示传地址, 把具体数值所在的地址当作参数传递.
所以var pchar = string的地址的地址. 但是你vb中只有一个byval, 也就是只是把字串
的地址传到dll中.
dll里解释参数时, 先把传进来的数当作地址, 转到这个的地址上(var 的作用), 然后把那
个具体地址里头32位数当成另一个地址(pchar作怪), 转到那个地址准备找#0结尾的字符串, 鬼
道这时已经转到哪去了! (大部分情况下应该出现非法内存访问了).
 
我在vb中写了个回调函数 让dll中的函数来调用 但一直出错 可能是什么原因啊
 
如果字符串不太长,如最多255个字符,可以传一个shortstring就可以了。
 
我用vb调用delphi中的dll时候 遇到问题 例子如下:
delphi中的函数如下:
Function Listen (ListenPort:integer):boolean; stdcall; external 'JustPipe.Dll';
Function SetOnFileArrive(Const p_Port :Integer;
Const p_OnFileArrive:TOnFileArrive):Boolean; stdcall; external 'JustPipe.Dll';
TOnFileArrive=Procedure(Const p_FileName:PChar):Integer; stdcall;

vb中我个人写的声明及回调函数
Declare Function Listen Lib "JustPipe" (ByVal port As Integer) As Boolean
Declare Function SetOnFileArrive Lib "JustPipe" (ByVal port As Integer, ByRef d As Long) As Boolean
//下面函数是调用dll中的SetOnFileArrive函数 以及传递我的回调函数的地址
Public Sub Hook()
Listen 2000
a = SetOnFileArrive(2000, AddressOf gcb)End Sub
End Sub
回调函数如下:
Public Sub gcb(ByVal filename As String)
MsgBox "ok"
End Sub
运行出错啦 各位高手帮我看看吧 谢谢
 
把pchar对应的那个修改成String可以吗,另外楼主可以把错误信息贴详细一点
 
后退
顶部