代码之家  ›  专栏  ›  技术社区  ›  bugmagnet

如何将PowerBASIC类型转换为VB6类型?

  •  0
  • bugmagnet  · 技术社区  · 15 年前

    这些类型来自的演示 FastCGI Dll Library (with SIGTERM handler) for Windows Web Servers 并且是用PowerBASIC编写的。我正在尝试将它们转换为VB6(还发现了如何 call a CDECL DLL from VB6 ).

        ' Structures
        TYPE FCGX_STREAM
          pData           AS DWORD            ' Pointer to the first byte of data   
          LenStored       AS DWORD            ' Bytes Total data stored - up to 4.2GB 
          Capacity        AS DWORD            ' Bytes Total available   - up to 4.2GB  
          CurPos          AS DWORD            ' Current Position within the buffer of the next byte to read, as an offset from pData
    
          Reserved        AS STRING*12        ' Opaque Variables
        END TYPE ' 28 bytes  
    
    
        TYPE FCGX_REQUEST 
          Version         AS LONG             ' Dll Version Number * 1000 = %FCGI_VERSION        
          ReqCount        AS LONG             ' Request Counter 
    
          Role            AS LONG             ' FastCGI Role
          ConnFlags       AS LONG             ' Connection flags - zero = application closes connection after responding
    
          ReqMethod       AS LONG             ' Request HTTP Method - Code 1 - 8
          ContLen         AS LONG             ' CONTENT_LENGTH - Length of POST data sent (in the pInStream Data String)   
          pzQuery         AS ASCIIZ PTR       ' Pointer to ASCIIZ (Null Terminated) QUERY_STRING (Values Only) - Always a valid pointer
    
          nParam          AS LONG             ' Number of Request Params in the array                                  
          envp            AS DWORD PTR        ' Pointer to Array of Request Parameters  
    
          pIn             AS FCGX_STREAM PTR  ' Pointer to a String Builder object
          pOut            AS FCGX_STREAM PTR  ' Pointer to a String Builder object
          pErr            AS FCGX_STREAM PTR  ' Pointer to a String Builder object                                          
    
          pzLastErr       AS ASCIIZ PTR       ' Pointer to ASCIIZ String containing Last Error description
    
          Reserved        AS STRING*108       ' Opaque Variables
        END TYPE ' 160 bytes
    

    ASCIIZ PTR , FCGX_STREAM PTR DWORD PTR

    2 回复  |  直到 15 年前
        1
  •  3
  •   Jim Mischel    15 年前

    我已经很多年没有使用VB6了,所以请带着健康的怀疑态度接受下面的信息。但如果我今天面对这个问题,我会从这里开始。

    因为您使用的是VB6,所以我假设这是32位代码。

    PTR类型似乎是指向由其他对象分配的内存块的指针。要访问该内存,需要取消对指针的引用。

    所有PTR值都是32位的,因此,当您为此创建VB6结构时,请放置DWORD或LONG或VB6 32位值的任何内容。

    要取消对指针的引用,需要调用WindowsAPI函数RtlMoveMemory,如下所述 here . RtlMoveMemory的所有三个参数都是32位值。

        2
  •  1
  •   Community CDub    8 年前
    • Jim's answer Microsoft advice 关于编写要从VB调用的C DLL。最初与VB5一起发布,但仍与VB6相关。说明了包装的结构等。
    • 编辑也值得一看:VB6大师卡尔·彼得森 discusses 如何在VB6中处理包含指针的结构。