现在的位置: 首页 > 综合 > 正文

用INDY9开发FTP客户端_02

2013年01月11日 ⁄ 综合 ⁄ 共 1285字 ⁄ 字号 评论关闭

用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而已。具体的原因,好像有篇文章解释了。

抱歉!评论已关闭.