首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移植C联盟

移植C联盟
EN

Stack Overflow用户
提问于 2015-05-06 15:54:34
回答 1查看 168关注 0票数 2

我正在尝试移植一个C结构,里面有一个联合结构。Winapi.Winsock2.pas中的默认结构在记录中缺少一些字段。但这是正确的方式吗?谢谢。

代码语言:javascript
复制
typedef struct _WSACOMPLETION {
  WSACOMPLETIONTYPE Type;
  union {
    struct {
      HWND   hWnd;
      UINT   uMsg;
      WPARAM context;
    } WindowMessage;
    struct {
      LPWSAOVERLAPPED lpOverlapped;
    } Event;
    struct {
      LPWSAOVERLAPPED                    lpOverlapped;
      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc;
    } Apc;
    struct {
      LPWSAOVERLAPPED lpOverlapped;
      HANDLE          hPort;
      ULONG_PTR       Key;
    } Port;
  } Parameters;
} WSACOMPLETION;
代码语言:javascript
复制
_WSACOMPLETION = record
  &Type: WSACOMPLETIONTYPE;
  case Parameters: Integer of
    0: (hWnd: HWND; uMsg: UINT; context: WPARAM); // WindowMessage
    1: (lpOverlapped: LPWSAOVERLAPPED); // Event
    2: (lpOverlapped: LPWSAOVERLAPPED; lpfnCompletionProc: LPWSAOVERLAPPED_COMPLETION_ROUTINE); // Apc
    3: (lpOverlapped: LPWSAOVERLAPPED; hPort: HANDLE; Key: ULONG_PTR); //Port
end; 

编译器会向Error: E2004 Identifier redeclared: 'lpOverlapped'抱怨

更新2:

经过一番思考我想出了这个。

代码语言:javascript
复制
  _WSACOMPLETION = record
    &Type: WSACOMPLETIONTYPE;
    case Parameters: Integer of
    0: (WindowMessage: record
        hWnd: HWND;
        uMsg: UINT;
        context: WPARAM;
          end);
    1: (Event: record
        lpOverlapped: LPWSAOVERLAPPED;
         end);
    2: (Apc: record
                lpOverlapped: LPWSAOVERLAPPED;
                lpfnCompletionProc: LPWSAOVERLAPPED_COMPLETION_ROUTINE
       end);
    3: (Port: record
        lpOverlapped: LPWSAOVERLAPPED;
        hPort: HANDLE;
        Key: ULONG_PTR;
         end)
  end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 16:20:33

您的翻译很好,您必须为记录的每个成员使用一个单独的名称这一事实。

不过,就我个人而言,我会为工会的每一个分支定义一个记录。这将允许您给联合的每个分支一个名称,就像C代码中的情况一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30081761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档