将C声明转换为Delphi XE2

奥加龙佐

我在将某些C声明转换为Delphi XE2以便在DLL中调用函数时遇到麻烦。我翻译了Visual Basic源文件中的所有函数声明,但是在测试它们时遇到了问题。一些函数返回了Long值,但是调试我的代码时,我发现这些函数所涉及的返回值不正确。然后,我转向C语言中的原始代码,然后我发现了麻烦的根源:在原始C代码中的某个点上有以下声明:

typedef struct { } __RSI_CHANNEL;       
typedef __RSI_CHANNEL FAR* RSI_CHANNEL;

现在,一些函数返回RSI_CHANNEL;这些函数返回如下值:

return (RSI_CHANNEL)ws;

ws声明为:

rsiChannel FAR* ws = new FAR rsiChannel;

rsiChannel是一个typedef结构。到目前为止,一切都很好...到目前为止,我想你们当中有些人可能已经将其视为PIMPL惯用语。好的,根据源代码注释,我应该保存该返回值(RSI_CHANNEL)并针对NULL进行测试,然后将其传递给未修改的函数调用……仅此而已...所以我认为应该在Delphi中实现作为指针。但这是行不通的。像这样:

Type 
  RSI_CHANNEL = Pointer;

...{ later in implementation block }...

Function rsiInitWsock(HostName : PAnsiChar; port : Long) : RSI_CHANNEL; stdcall; external 'rsidll32';

没有编译错误,没有运行时错误。如果调用此函数,将得到Nil。

¿任何想法如何在Delphi XE2中实现?而且,¿我做错了什么?提前致谢。

额外细节:

  • Delphi XE2(目标:Win32)
  • Windows 7 x64

我发现了问题;它与我的代码无关,从一开始就是对的。它必须与DLL中的ping函数有关,它可以在笔记本电脑上使用,但不希望与台式机(都为Win7)一起使用,并且当它不起作用时,它将中断对DLL的后续函数调用(为什么,我还不知道...)。无论如何,这不是一个完整的解决方案,但是@DavidHeffernan是第一个提出问题在其他地方的想法的人,所以我接受他的回答主要是因为它为我指明了正确的方向。谢谢大家!

戴维·赫弗南

如上所述,您对的处理RSI_CHANNEL是正确的。将其声明为Pointer适当的操作。为了增强类型安全性,您可以定义一个不同的类型而不是一个别名:

Type 
  RSI_CHANNEL = type Pointer;

如果port参数确实是,WORDWord在Delphi中映射到

至于您的问题,它在其他地方。的翻译RSI_CHANNEL是准确的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将C声明转换为Delphi XE2

来自分类Dev

WSDL导入问题Delphi XE2

来自分类Dev

Delphi XE2中的“ uses”错误

来自分类Dev

导出组件Delphi XE2

来自分类Dev

如何在Delphi XE2中将IDispatch转换为TOleServer?

来自分类Dev

从Python转换访问delphi XE2中的DLL

来自分类Dev

Delphi XE2中重复的构造函数警告

来自分类Dev

使用Delphi XE2进行采样分析器

来自分类Dev

TCustomControl上未触发Delphi XE2 CMMouseLeave

来自分类Dev

TDateTimePicker与DELPHI XE2缺少OnDblClick事件

来自分类Dev

Delphi XE2中的FastReport主/详细信息

来自分类Dev

Delphi XE2:如何使用序数> 255的整数集

来自分类Dev

Delphi XE2:如何使用序数> 255的整数集

来自分类Dev

Delphi XE2:如何使用序数> 255的整数集

来自分类Dev

如何重建Delphi XE2随附的Indy 10?

来自分类Dev

使用Delphi XE2进行采样分析器

来自分类Dev

在Delphi XE2中从dll调用过程

来自分类Dev

Delphi XE2中的FastReport主/详细信息

来自分类Dev

在Delphi XE2和Delphi XE7中LongMonthNames的用法

来自分类Dev

安装Delphi XE4时,在Delphi XE2中丢失了TeeChart / TChart

来自分类Dev

从Oracle XE 11g导入存储的proc时,Delphi XE2中的tSQLStoredProc错误?

来自分类Dev

为什么Delphi XE2不让我将字体资源嵌入为RCDATA?

来自分类Dev

尝试从VS2013 C#程序调用DELPHI XE2 DLL时出错

来自分类Dev

在Delphi XE2中编译Delphi 7代码

来自分类Dev

如何从Delphi XE2的所有源文件中删除未使用的单元?

来自分类Dev

如何在Delphi XE2中使TMaskEdit多行编辑

来自分类Dev

在Delphi XE2中可以使用pdb文件吗?

来自分类Dev

在Delphi Xe2中使用通用排序出现错误

来自分类Dev

在Delphi XE2中使用JclCompression从ZIP存档中删除文件

Related 相关文章

热门标签

归档