Delphi 如何从C#define转换为函数

Delphi 如何从C#define转换为函数,delphi,Delphi,我有一个C头,定义如下 #define tds_accept accept #define tds_getpeername getpeername #define tds_getsockopt getsockopt #define tds_getsockname getsockname #define tds_recvfrom recvfrom 在这里,我应该将defines转换为Delphi并分配函数(来自Winsock2)。我尝试了const和type type td

我有一个C头,定义如下

#define tds_accept      accept
#define tds_getpeername getpeername
#define tds_getsockopt  getsockopt
#define tds_getsockname getsockname
#define tds_recvfrom    recvfrom
在这里,我应该将defines转换为Delphi并分配函数(来自Winsock2)。我尝试了
const
type

type
  tds_accept      = accept;
  tds_getpeername = getpeername;
  tds_getsockopt  = getsockopt;
  tds_getsockname = getsockname;
  tds_recvfrom    = recvfrom;
并且存在错误
E2007常量或预期类型标识符
E2035实际参数不足


可以用Delphi实现吗?

使用类型化变量,例如:

var
  tds_accept      : function(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket; stdcall;
  tds_getpeername : function(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer; stdcall;
  tds_getsockopt  : function(s: TSocket; level, optname: Integer; optval: PAnsiChar; var optlen: Integer): Integer; stdcall;
  tds_getsockname : function(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer; stdcall;
  tds_recvfrom    : function(s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer; stdcall;

initialization
  tds_accept      := accept;
  tds_getpeername := getpeername;
  tds_getsockopt  := getsockopt;
  tds_getsockname := getsockname;
  tds_recvfrom    := recvfrom;
或:


改用类型化变量,例如:

var
  tds_accept      : function(s: TSocket; addr: PSockAddr; addrlen: PInteger): TSocket; stdcall;
  tds_getpeername : function(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer; stdcall;
  tds_getsockopt  : function(s: TSocket; level, optname: Integer; optval: PAnsiChar; var optlen: Integer): Integer; stdcall;
  tds_getsockname : function(s: TSocket; var name: TSockAddr; var namelen: Integer): Integer; stdcall;
  tds_recvfrom    : function(s: TSocket; var Buf; len, flags: Integer; var from: TSockAddr; var fromlen: Integer): Integer; stdcall;

initialization
  tds_accept      := accept;
  tds_getpeername := getpeername;
  tds_getsockopt  := getsockopt;
  tds_getsockname := getsockname;
  tds_recvfrom    := recvfrom;
或:


Delphi没有预处理器。因此,您通常会找到不同的方法来解决在C/C++中使用预处理器处理的问题。就我个人而言,我认为我应该使用这样的加载时间链接:

function tds_accept(...): TSocket; external dllname name 'accept';

等等。

Delphi没有预处理器。因此,您通常会找到不同的方法来解决在C/C++中使用预处理器处理的问题。就我个人而言,我认为我应该使用这样的加载时间链接:

function tds_accept(...): TSocket; external dllname name 'accept';

等等。

AFAIR delphi不支持宏,您可以使用指向函数或外部宏处理器的指针:AFAIR delphi不支持宏,您可以使用指向函数或外部宏处理器的指针: