用INDY9开发FTP客户端_02
-- 用VB调用BCB/VC编写的DLL
Roger Yang
我这个FTP客户端的架构比较妖怪,所有的FTP操作都封装在BCB写的DLL中,这个DLL被VB调用,所以多线程在VB中实现。唉,多恶心的架构啊,不是自己给自己下套嘛。可没办法,朋友就要求这么做。最后,事实证明确实是把自己给套牢了,不过这是后话了。现在先说VB调用BCB/VC编写的DLL的几点问题。
1. vc中的void 在vb中应该声明为sub而不是function
C函数这样
void __stdcall ShowDlg(char *urlPath, char *savePath)
{
}
那vb声明就这样
Private Declare Sub ShowDlg Lib "DLLShared.dll" (ByVal urlPath As String, ByVal savePath As String)
C函数这样
__declspec(dllexport) int __stdcall ShowDlg(LPCSTR urlPath, LPCSTR savePath)
{
}
那vb声明就这样
Private Declare Function ShowDlg Lib "DLLShared.dll" (ByVal urlPath As String, ByVal savePath As String) As Long
2. VC++中数据类型对应到VB中的数据类型VC++数据类型VB数据类型
short Integer
int Long
long Long
UNIT Long
ULONG Long
WORD,DWORD Long
WPARAM,LPARAM Long
WMSG,UMSG Long
HRESULT Long
BOOL Boolean
COLORREF Long
HWND,HDC,HBRUSH,HKEY,等等. Long
LPSTR,LPCSTR String
LPWSTR,OLECHAR,BSTR String
LPTSTR String
VARIANT_BOOL Boolean
unsignedchar Byte
BYTE Byte
VARIANT Variant
(任何以*或**结尾的数据类型)Long
char *是一个指针型,你用string代替显然不行
3. char *是一个指针型,用string代替是可以的,不过是byVal引用,不是byRef而已。具体的原因,好像有篇文章解释了。