忙了一天,还是没有解决,VB调用delphi做的DLL返回Pchar类型问题(100分)

实验了半天,没有成功,不过尝试这样:
function GetIdeDiskSerialNumber(Ret_Number: pChar): Integer ;stdcall;
这样也许更规范一些
或者直接使用
Procedure GetIdeDiskSerialNumber(Ret_Number: pChar) ;stdcall;
同时在VB里面注意StrPtr的用法,也许有用。
 
>>得到的值不对,而在delphi下一切正常!
是如何不对?多了?还是少了?
 
dll还是返回 PChar
vb返回值为:as String
另外dll中sSerialNumber必须为全局变量,不能为局部变量
 
千万不能as String呀。否则,唉(猜了一把眼泪)我刚才就这样将Windows Me给弄死了。
 
[red]返回的该是硬盘序列号。
得到的是其他数字。位数也不对[/red][:(]
 
偶没学过VB,不过我看你定义的DLL的返回类型是PCHAR类型,怎么在VB里又用LONG来接收呢?
 
[red]VB里哪一个类型与delphi的Pchar对应呢???
Pchar类似于指针,我不明白了。
[/red]
 
什么叫千万不能?delphi返回pchar对应vb就是返回as string
比照一下winapi的定义
看vb5的winapi.txt里面对win32api CharUpper的定义:
Declare Function CharUpper Lib "user32" Alias "CharUpperA" (ByVal lpsz As String) As String
看delphi的定义:
function CharUpperA(lpsz: PAnsiChar): PAnsiChar;
stdcall;
(注意PAnsiChar在我们的 非unicode 程序就是PChar)
 
pchar是对应c中的字符数组的,vb中就不太清楚了,我想你应该找到vb中
对应的类型才行。
 
不知道将返回值设为一个静态数组怎么样,类型用ShortInt传过去以后用Chr函数转换出来。
 
得到的那个应该是指针。应该用long接收。
但是如何将指针转换成地址就是问题了。
 
[red]同意yzhshi[:)]
大家继续,我一直在线等结果那!
[/red]
 
像返回字符串这样的动态连接库,我一般是作为参数返回的,而不是作为返回值。
把你的动态连接库接口改一下试试看,应该就可以了,这样分配字符串地址的事由
VB负责。我原来写过一个这样的dll(用VC),这样不管是什么语言调用都可以。
 
pchar <> string
 
同意bluerain 其实对于Delphi程序来说,也是最好作为参数来返回,否则地址处理比较讨厌(至少个人认为)
 
[red]参数方法应该可行,我头都大了,不想多想了
bluerain给个例子如何??给你多加分
[/red]
 
你试试在DLL里用widestring类型来定义看看?然后在VB里用string来接收!
 
widestring试过了,非法操作,不行的
 
用参数返回就不会有问题。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
702
import
I
I
回复
0
查看
598
import
I
顶部