关于C++和DELPHI的数据类型兼容的问题

DelphiBird2 2003-10-15 04:51:19
C++中的函数有一个
int GetReport(char * content,char * deleverresp,char * returncontent,
int * errcode);
这几个参数都要传递地址的;
其中content要求是传递进去的,然后处理后在其他三个变量里保存返回的东西;
请问声明成Delphi的类型应该是什么?
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DelphiBird 2003-12-18
  • 打赏
  • 举报
回复
C++中的函数有一个
int GetReport(char * content,char * deleverresp,char * returncontent,
int * errcode);
用pchar就可以了,但是要记得为传入获得数据得字符串数组参数先分配内存;
整形变量用var显示声明传递地址
GetMem(deleverREsp,256);
getmem(returncontent,256);
DelphiBird2 2003-10-15
  • 打赏
  • 举报
回复
up
DelphiBird2 2003-10-15
  • 打赏
  • 举报
回复
up
WuLoveXue 2003-10-15
  • 打赏
  • 举报
回复
前三个是在DELPHI时是pchar类型,后面的是整型!传前三个参数时,只要用Pchar()函数转换下就行了,第4个直接传整型变量!
IMBIRDMAN 2003-10-15
  • 打赏
  • 举报
回复
这样试试
content array[1..20] of char 或者 content:string
返回参数可用字符数组,deleverresp array[1...20] of char
调用可用@deleverresp
Delphi中制作DLL •一 Dll的制作一般分为以下几步: 1 在一个DLL工程里写一个过程或函数 2 写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。 二参数传递 1 参数类型最好与window C++的参数类型一致。不要用DELPHI数据类型。 2 最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windows c++兼容。 3 用stdcall声明后缀。 4 最好大小写敏感。 5 无须用far调用后缀,那只是为了与windows 16位程序兼容。 三 DLL的初始化和退出清理[如果需要初始化和退出清理] 1 DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下: procedure DllEnterPoint(dwReason: DWORD);far;stdcall; dwReason参数有四种类型: DLL_PROCESS_ATTACH:进程进入时 DLL_PROCESS_DETACH进程退出时 DLL_THREAD_ATTACH 线程进入时 DLL_THREAD_DETACH 线程退出时 在初始化部分写: DLLProc := @DLLEnterPoint; DllEnterPoint(DLL_PROCESS_ATTACH); 2 如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil); 3 在退出时一定保证DcomConnection.Connected := False,并且数据集已关闭。否则报地址错。 四全局变量的使用 在widnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份, 但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用程序间的数据 传递,除非你用内存映像文件。 五、其他:调用方式按照标准的Windows调用方式. 六、关于参数传递 •Delphi程序之间调用DLL,如果要用String类型的话,要在引用的单元加上ShareMem 单元。 •如果Delphi写的DLL供其他开发工具使用的话,不要使用String类型,用PAnsiChar类型。 尽量使用标准DLL接口。指的是传递的参数类型及函数返回类型不能是Delphi特有的, 比如string(AnsiString),以及动态数组和含有这些类型成员的复合类型(如记录),也不 能是包含有这些类型成员数据成员的对象类型,以避免可能的错误。如果使用了string类型或 动态数组类型,且调用方不是Delphi程序,则基本上会报错。如果调用方是Delphi但调用方或 被调用方没有在工程文件的第一包含单元不是ShareMem,也可能会出错。 七、关于回调Funciton 你可以把Callback函数看作是一种特殊的消息响应函数,一般来说我们不会自己调用这种函数, 而是有某些系统函数调用,而且不需要向后传递消息。 只要象C/C++这样支持函数指针的语言都 有回调函数的概念,它实际上是向被调用函数传一个你的函数地址,然后被调用函数向通过你传 入的函数地址来调用你的函数 。 以上是结构化回调,到高级语言Object Pascal、C++中回调函数并没有退出,反而得到延伸与 扩展,在面向对像中的回调,其实是指面向对像中类对像的事件,事件就是原始的回调函数。面 向对像, 将回调函数定义成事件过程,在程序引用对像时,若指定了对像的过程事件后,那么在 要进行事件触发的地方检查事件过程是否分配,如果分中的就执行事,也就是执行了回调函数。
在工程实践中经常需要实现上下位机间的串口通信,为了编程的方便性我们通常采用字符方式进行数据传输,由于需要数据转换以及转换后的数据长度增加,数据传输速度不够理想,为了提高系统实时性在某些特殊场合更需要直接采用二进制进行数据传输。Delphi6.0是一种面向对象的可视化的快速应用开发(RAD)工具,它既具有C++语言的强大功能,同时又有VB的易用性,Delphi6.0的伸缩性强,既可用于开发小项目,也可用于开发大项目,尤其适用于快速应用的开发,其大量优点使它迅速成为一种非常流行的编程语言。Delphi6.0中串口通信的实现方法很多,可以使用嵌入式汇编语言、API函数以及VB的MSComm控件来实现。其中使用MSComm控件来实现串口通信最方便,但有关Delphi如何实现二进制通信的资料很少,大部分参考书都只介绍了VB中MSComm控件的字符通信方式。由于Delphi中数组跟Variant变量不兼容,即在Delphi中字节数组不能直接赋值给MSComm控件的output属性,这跟VB有中很大的不同(VB中可以直接赋值),本人通过摸索总结出两种实现Delphi二进制通信的方法,即动态数组法和可变数组(Variant Array)法,并给出了应用实例。在应用实例中我们使用Delphi的absolute关键字来定义两个同地址的动态数组,类型分别为字节型数组和短整型数组,使用字节动态数组接收数据后,可以直接使用短整型动态数组获得短整型数据,省却了数据转换的麻烦
TRichView 是Delphi/C++Builder 控件,主要用于显示、编辑和打印超文本文档。新版本解决多个兼容问题,更新了字符串标签、剪贴板、RTF和DB组件。 兼容问题 Item tags是字符串,不再是整数型 OnRVFPictureNeeded参数改变 TRichView.LoadText, LoadTextFromStream, SaveText, SaveTextToStream, TRichViewEdit.InsertTextFromFile 有了新的参数。 TRVLongOperation的声明类型已经改变 以下全局变量从RVTable.pas中移除:RichViewTableGridStyle, RichViewTableGridStyle2, RichViewTableGridColor,被替换为TRVStyle属性。 风格模板 默认情况下,风格模板不能被使用,需激活风格模板,设置TRichView.UseStyleTemplates = True。 在TRichViewEdit中,你可以应用指定的模板样式到选定区域,使用这些方法:ApplyStyleTemplate, ApplyTextStyleTemplate, ApplyParaStyleTemplate. 样式模板可用ChangeStyleTemplates方法编辑。 RTF TRichView.RTFOptions中的新选项:rvrtfSavePngAsPng。如果默认有这个选项,PNG图像也会被保存为PNG格式。 打印 表格行的新属性: KeepTogether; 新的表格方法: SetRowPageBreakBefore, SetRowKeepTogether; table.PrintOptions新选项: rvtoContinue; 新属性:TCustomRVPrint.IgnorePageBreaks。 旋转 表格单元格可旋转 90°, 180°或 270。 一个新的方法返回项坐标: GetItemCoordsEx; 它考虑到了单元格的旋转。 字符串标签 新属性:cell tags; 从13.2版本开始,项目标签是字符串(Unicode for Delphi 2009或更高,ANSI老版本的Delphi),从整数到PChar无需类型转换! 64-bit 32-bit 和 64-bit编译器均支持RAD Studio XE2+。 注意: TRVOfficeConverter 可以编译为64-bit应用程序,但列表的转换器将为空 (因为转换器是32-bit DLLs,不能再64-bit应用中使用)。 HTML存储 TRichView.SaveHTMLEx可保存扩展的背景图像; TRichView.SaveHTMLEx 能更好的保存列表标记 (无论是在常规或rvsoMarkersAsText 模式); TRichView.OnSaveImage2事件新增"hidden"参数。 DB组件 如果rvfoLoadBack在 RVFOptions中, TDBRichView会在加载数据前清空 BackgroundBitmap; 如果rvfoLoadBack在RVFOptions 和 FieldFormat=rvdbRVF中, TDBRichViewEdit会在加载数据前清空 BackgroundBitmap。 剪贴板 TRichViewEdit 可以粘贴URL,新增方法:PasteURL; 新属性:AcceptPasteFormats允许限制格式列表; 新属性:DefaultPictureVAlign定义一个对齐以粘贴和放置图像。

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧