vb调用vc的dll的问题,谢谢
vc的dll的函数原形为:
int GetHardDriveComputerID (char *DriveModelNumber,char *DriveSerialNumber,char *ComputerId)
vb中这样写:
Public Declare Function GetHardDriveComputerID Lib "Diksid.DLL" (ByVal DriveModelNumber As String, ByVal DriveSerialNumber As String, ByVal ComputerId As String) As Integer
Private Sub Command1_Click()
Dim s1 As String * 200
Dim s2 As String * 200
Dim s3 As String * 200
s1 = "dlskfsalddsfdjljlksfsdfjlsd"
s2 = "jflsjdlskajflsakjflksajfkslajfd"
s3 = "kdslfjewoiruweoiyt5hyh56urweio"
GetHardDriveComputerID s1, s2, s3
MsgBox s2
End Sub
怎么提示错误,该怎么调用带char *的vc中的dll函数?谢谢
问题点数:20、回复次数:13Top
1 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-02 22:31:25 得分 0
改一下声明试试:
Public Declare Function GetHardDriveComputerID Lib "Diksid.DLL" (ByRef DriveModelNumber As String, ByRef DriveSerialNumber As String, ByRef ComputerId As String) As LongTop
2 楼charles8513()回复于 2006-03-02 22:54:28 得分 0
不行啊Top
3 楼jackyhyoung(愛因思念)回复于 2006-03-03 09:43:47 得分 0
Public Declare Function GetHardDriveComputerID Lib "Diksid.DLL" (ByRef DriveModelNumber() As byte , ByRef DriveSerialNumber() As byte, ByRef ComputerId As byte) As Long
然后在把字符串改为BYTE数组再试试.Top
4 楼clark_m()回复于 2006-03-07 10:44:33 得分 0
将vc函数原形的char *XX 改成LPSTR *XX 在Vb里可以用stringTop
5 楼of123()回复于 2006-03-07 11:09:11 得分 0
Public Declare Function GetHardDriveComputerID Lib "Diksid.DLL" (ByVal DriveModelNumber As String, ByVal DriveSerialNumber As String, ByVal ComputerId As String) As Long
在 VB 中,String 类型只能 ByVal 调用,因为它传的是缓冲区的地址。
或者,
Public Declare Function GetHardDriveComputerID Lib "Diksid.DLL" (ByRef DriveModelNumber() As byte , ByRef DriveSerialNumber() As byte, ByRef ComputerId() As byte) As Long
能说一下报什么错误吗?
Top
6 楼tztz520(午夜逛街)回复于 2006-03-07 12:47:12 得分 0
在VC下这样声明:
extern "C" __declspec(dllexport) int GetHardDriveComputerID (char *DriveModelNumber,char *DriveSerialNumber,char *ComputerId)
Top
7 楼passionke(每一步都改变未来,却只能有一种结局!)回复于 2006-04-17 17:59:14 得分 0
upTop
8 楼leongwong()回复于 2006-04-17 18:30:18 得分 0
关注!Top
9 楼leongwong()回复于 2006-04-17 18:31:07 得分 0
楼主是如何解决的,上来通告一声!Top
10 楼qiqi5521()回复于 2006-04-17 18:57:59 得分 0
在VC下也可这样声明:
int _stdcall GetHardDriveComputerID (char *DriveModelNumber,char *DriveSerialNumber,char *ComputerId)
Top
11 楼jwt3000(风)回复于 2006-04-18 11:29:41 得分 0
char* 最好用LPCTSTRTop
12 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2006-04-18 11:54:35 得分 0
int __stdcall GetHardDriveComputerID (char *DriveModelNumber,char *DriveSerialNumber,char *ComputerId)
Public Declare Function GetHardDriveComputerID Lib "Diksid.DLL" (ByVal DriveModelNumber As String, ByVal DriveSerialNumber As String, ByVal ComputerId As String) As Long
其他不变Top
13 楼dingzhihui(无名)回复于 2006-04-18 13:34:39 得分 0
这样声明试试:
Public Declare Function GetHardDriveComputerID Lib "Diksid.DLL" (ByRef DriveModelNumber() As byte , ByRef DriveSerialNumber() As byte, ByRef ComputerId() As byte) As LongTop




