所以,我有一组相互依赖的.c和.h文件,而我正在试图弄清楚C / C ++到Pascal的工作方式(我的delphi / pascal工作非常基本)。 c文件是数学算法的步骤1-N(按顺序)(每个是一个单独的函数),一个头指定每个函数中使用的变量(我使用record
在delphi中重新创建.h文件),另一个标题详细说明了自定义变量类型。 目标是访问函数而无需将C代码重写为Pascal / Delphi语法,从delphi代码链接到某些现有c。 有太多冗长的文件(12 .c和4 .h)供我剪断,我的C非常生锈,但我会尝试。
例如,我有一个文件funcs.h :
#ifndef _FUNCS_H #ifndef _FUNCS_H #ifdef __cplusplus extern "C" { #endif #include "New_Type.h" // custom variable used in funcs.h #include "Optional.h" // optional set of more functions typedef struct { int a1[4]; double b1[10]; // Computed if optional functions are requested double c1[10]; int d1[4]; } func1; typedef struct { new_type c2, d2; } func2; } #endif #endif
文件func1.c和func2.c对上述变量进行了一些数学处理(主要是线性代数)。 我的直接问题是:
也许我需要改变我的搜索/问题,但老实说我不确定如何正确地问这个问题。 我不需要一个具体的答案,说实话,如果有人可以指点我一些链接(一本书:我将来会使用这种语言),我更愿意,我真的很感激。
在此先感谢您的帮助。
从#2开始:在Delphi中,标头和实现都在同一个文件中。 所以这里是一个类的基本框架,显示你的标题内容(.h)和实现内容(.c)将适合Delphi中单元/文件的结构。
unit Unit1; interface uses // List of header dependencies goes here... // Stuff from the .h file will go here implementation uses // List of implementation dependencies goes here... // Stuff from the .c file will go here end.
回到#1:没有必要将C头文件的1:1映射到Delphi文件,但如果在C中每个文件的粒度级别很好,那么在Delphi中可能会有类似的结果。 除非你有充分的理由改变它,否则我会将它们映射到一个C头文件到一个Delphi文件。
关于Delphi开发,About.com有一个非常详细的部分,例如, 与单元一起工作的页面可能是学习Delphi文件结构的一个很好的起点。 我也发现自己使用DelphiBasics作为参考站点(尽管它更多地针对方法而不是结构)。 绝对不要打扰Embarcadero网站上的官方文档。 他们的语言指南部分实际上是一本关于学习Delphi的教科书,并且足够详细以获得该语言的基础知识。
然后就#3而言:如果你想要更深入的话,这可能很容易就堆栈溢出问题提出几个单独的完整问题。 但总的来说,听起来你正在寻找直接从Delphi调用c代码的代码。 CDecl
是调用约定之一(碰巧匹配c …),它指定将哪些订单参数传递给方法。 在Embarcadero的文档中阅读更多相关信息 。 $LINKLIB
用于链接到一个库(在这种情况下是C库,如果你正在调用c代码,你将会这样做),并且回调大致相当于c中的函数指针。
从你的第三个子问题的整体声音,我猜你一直在阅读如何在Delphi项目中使用C代码,而不必将C代码重写为Pascal / Delphi语法,从delphi链接代码到一些您不想重写或转换的现有c库。 如果这是你的最终目标,只需链接到你的C库而不重写它,这篇关于在FreePascal中使用C的文章可能会有很好的帮助。 为了链接到C代码,FreePascal和Delphi(两种Pascal变体)之间的差异相对可以忽略不计。 基本上,您必须重新编写或将c标头转换为Pascal语法,以便Delphi知道C库中的函数,因此您可以调用它们。 如果您正在寻找有关转换头文件的更多信息,Bob博士有一个关于在Delphi中使用C dll的详细页面 。 在有关类型名称如何匹配的其他有用信息中,在该页面上有一个示例,用于将c头文件转换为delphi头文件。 如果您的目标只是调用或利用Delphi应用程序中的现有c代码而不将整个代码库完全移植到Delphi,则可能更容易使用自动化工具将头转换为delphi语法。
并且为了举例,你的问题中的标题,通过Bob博士的HeadConverter工具转换,给出如下输出:(实际输出更长,包括用于加载c代码作为dll和一些注释的代码)
unit FILE1; interface uses Windows; {$INCLUDE "New_Type.h"} {$INCLUDE "Optional.h"} type func1 = record a1: Array[0..4-1] of Integer; b1: Array[0..10-1] of Double; c1: Array[0..10-1] of Double; d1: Array[0..4-1] of Integer; end {func1}; type func2 = record c2, d2: NEW_TYPE; end {func2}; {...} implementation {...} end.
以上就是c/c++开发分享Delphi XE3:使用多个C头文件和源文件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/559811.html