hkr As Long
---- 同样的,VC++数据类型LPSTR和LPCSTR代表指向字符串的指针,在VB中可以当作String类型.因为当你传送结构给API时,VB将把结构中所有的String转换成指向ANSI字符串的指针.因此后两个成员在VB中表示为:
pszSubKey As String
pszValueName As String
---- 就可以了.转换成VB代码后完整的结构为:
Public Type tagTBSAVEPARAMSA
hkr As Long
pszSubKey As String
pszValueName As String
End Type
---- 以下是VC++中数据类型对应到VB中的数据类型VC++数据类型VB数据类型
------------------------------------
short Integer
intLong
long Long
UNIT Long
ULONG Long
WORD,DWORD Long
WPARAM,LPARAM Long
WMSG,UMSGLong
HRESULT Long
BOOL Boolean
COLORREF Long
HWND,HDC,HBRUSH,HKEY,等等. Long
LPSTR,LPCSTRString
LPWSTR,OLECHAR,BSTR String
LPTSTRString
VARIANT_BOOLBoolean
unsigned char Byte
BYTE Byte
VARIANT Variant
(任何以*或**结尾的数据类型)Long
---- 3.函数的转换
Public Declare Function CreateStatusWindowA Lib
"ComCtl32.dll" _
(Byval style As Long, _
Byval lpszText As String, _
Byval hwndParent As Long,Byval wID As Long) As Long
2.是你在vc 中的dll内函数到处时,应该加__stdcall(或WINAPI)关键字:
extern "C" __declspec(dllexport) int _stdcall(或WINAPI) get_cvq_fea(char img_name[],long *lng_doh_fea,long doh_len,long *lng_cvq_fea,long cvq_len)
应该这样
Declare Function get_cvq_fea Lib "f:\CDBIR\cvq_dll.Dll" _
(img_name As any, lf_hgm_fea As any, _
ByVal lf_hgm_len As Long, um_e1_fea As any, _
ByVal um_e1_len As Long) As Long
}
下面是vb中的声明:
Declare Function get_cvq_fea Lib "f:\CDBIR\cvq_dll.Dll" _
(ByVal img_name As String, ByRef lf_hgm_fea As Long, _
ByVal lf_hgm_len As Long, ByRef um_e1_fea As Long, _
ByVal um_e1_len As Long) As Long
此处是调用:
Dim lng_doh(64) As Long
Dim lng_cvq(24) As Long
Dim lng_rtn As Long