delphi代码转成c++builder

delphi代码转成c++builder,第1张

分类: 电脑/网络 >唯早>程序设计 >>其他编程语言

问题描述:

procedure txttojpeg(txt, filename: stringbrush_color: tcolorfont: tfont

font_color: tcolorwidth, height: integer)

var

temp: tbitmap

jpeg: tjpegimage

i, j: integer

begin

temp := tbitmap.create

try

temp.height := height

temp.width := width

temp.transparent := true

temp.canvas.brush.color := brush_color

temp.canvas.font := font

temp.canvas.font.color := font_color

j := 0

for i := 0 to form1.memo1.lines.count - 1 do

begin

j := j + 15

temp.canvas.textout(10, j, form1.memo1.lines.strings[i])表示距离,top,left.

end

temp.SaveToFile('c:\1.bmp')

finally

temp.destroy

end

end

procedure TForm1.Button1Click(Sender: TObject)

begin

txttojpeg(memo1.lines.text, savedialog1.filename + '', clwhite, Memo1.Font, clblack, memo1.width, memo1.height)

end

end.

解析:

Delph和BCB虽是一个公司,同为VCL框架,但是毕竟指让雀是两种语言,不会像楼上说的.换成->就可以的.

现假设楼主有一定的C++基础,能使用基本的BCB6,改写如下:

1.新建一新工程,加入一Memo和一Button,控件Name为Memo1和Button1(即默认的名字)

2.向Memo1中加入任意内容,双击Button1产生单击事件

3.加入滑并如下代码:

---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

---------------------------------------------------------------------------

#pragma package( *** art_init)

#pragma resource "*.dfm"

TForm1 *Form1

---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

---------------------------------------------------------------------------

void txttojpeg(TMemo* Memo1,AnsiString filename,TColor brush_color,TFont* font,TColor font_color,int width, int height)

{

Graphics::TBitmap *temp=new Graphics::TBitmap()

temp->Height=height

temp->Width=width

temp->Transparent=true

temp->Canvas->Brush->Color=brush_color

temp->Canvas->Font=font

temp->Canvas->Font->Color=font_color

int i=0,j=0

for (i=0i<Memo1->Lines->Counti++){

j = j + 15

temp->Canvas->TextOutA(10,j,Memo1->Lines->Strings[i])

}

temp->SaveToFile(filename)

delete temp

}

---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

txttojpeg(Memo1 ,"12.bmp", clWhite, Memo1->Font, clBlack, Memo1->Width, Memo1->Height)

}

---------------------------------------------------------------------------

4.代码中重复的可省略,程序在BCB6 SP4下编译运行通过

在Delphi编程中使用C语言代码

Windows下编程的工具有很多 例如VB Delphi VC等等 我在这里不想讨论 它们的具体哪个更好一点 这种幼稚的问题 玩过DOS程序设计的人都知道 DOS下很多语言的实质核心还是调用系统提供的汇编中断函数 到了Windows下 它就变成了我们常说的API了 而在Windows下写程序很多时候都是调用API 语言 只不过是一个表达工具而已

我现在已经参加工作大约有半年左右 我们公司是用Borland公司的Delphi作为主开发工具 本着未偏袒任何一个工具的立场 我说句山键公道话:Delphi是目前Win 下开发程序的最快速 最有效率的工具

Delphi适合用来开发应用程序 但是有时侯一些底层的东西可以直接使用C语言来开发 我在公司经常开发跟硬件相关的项目 而很多硬件的SDK包是用C来写的 这个时候我一般把它们转换成Delphi(PASCAL)语法的代码 下面谈一下我的个人粗浅经验 因为当时学校教的是Pascal语言 所以我对C语言并不是太熟手 下面的观点或者代码如有错漏之处希望高手们放小弟一马:)

一:将C语基唯销言的程序编译成DLL供Delphi调用 这种方法过于简单 而且需要额外带一个DLL文件 所以不在本文的讨论范围之内

二:直接转换C语言代码到DELPHI代码

C语言的函数格式与Delphi不同 它们是函数返回类型在前 函数声明在后 对于没有任何返回类型的函数则定义为VOID类型

例如:Delphi中函数function MyFunction:(intIN:integer):Bool相应的C语言代码就变成Bool MyFunction(int intIN)又例如procedure MyProcedure====>void MyProcedure采用这种方法 一般要求对C语言比较熟悉 我一般是采用这种方法 下面是我收集整理的自己常用的Delphi与C之间的类型对应表 其中左边是C类型 右边是对应的Delphi类型:

以下是引用片段 ABC  > TABC ACCEL  > TAccel ATOM  > TAtom BITMAP  > TBitMap BITMAPCOREHEADER 搏游 > TBitmapCoreHeader BITMAPCOREINFO  > TBitmapCoreInfo BITMAPFILEHEADER  > TBitmapFileHeader BITMAPINFO  > TBitmapInfo BITMAPINFOHEADER  > TBitmapInfoHeader BOOL  > Bool CBT_CREATEWND  > TCBT_CreateWnd CBTACTIVATESTRUCT  > TCBTActivateStruct CHAR  > Char CHAR*  > PChar CLIENTCREATESTRUCT  > TClientCreateStruct COLORREF  > TColorRef PAREITEMSTRUCT  > TCompareItemStruct STAT  > TComStat CREATESTRUCT  > TCreateStruct CTLINFO  > TCtlInfo CTLSTYLE  > TCtlStyle CTLtype  > TCtltype DCB  > TDCB DDEAACK  > TDDEAck DDEADVISE  > TDDEAdvise DDEDATA  > TDDEData DDEPOKE  > TDDEPoke DEBUGHOOKINFO  > TDebugHookInfo DELETEITEMSTRUCT  > TDeleteItemStruct DEVMODE  > TDevMode DOUBLE  > Double DRAWITEMSTRUCT  > TDrawItemStruct DWORD  > LongInt ENUMLOGFONT  > TEnumLogFont EVENTMSG  > TEventMsg FARPROC  > TFarProc FIXED  > TFixed FLOAT  > Single GLYPHMETRICS  > TGlyphMetrics HANDLE  > THandle HANDLETABLE  > THandleTable HARDWAREHOOKSTRUCT  > THardwareHookStruct HELPWININFO  > THelpWinInfo INT  > Integer KERNINGPAIR  > TKerningPair LOGBRUSH  > TLogBrush LOGFONT  > TLogFont LOGPALETTE  > TLogPalette LOGPEN  > TLogPen LONG  > LongInt LONG DOUBLE  > Extended LONG INT  > LongInt LPSTR  > PChar LPWSTR  > PWideChar MAT   > TMat MDICREATESTRUCT  > TMDICreateStruct MEASUREITEMSTRUCT  > TMeasureItemStruct MENUITEMTEMPLATE  > TMenuItemTemplate MENUITEMTEMPLATEHEADER  > TMenuItemTemplateHeader METAFILEPICT  > TMetaFilePict METAHEADER  > TMetaHeader METARECORD  > TMetaRecord MINMAXINFO  > TMinMaxInfo MOUSEHOOKSTRUCT  > TMouseHookStruct MSG  > TMsg MULTIKEYHELP  > TMultiKeyHelp NCCALCSIZE_PARAMS  > TNCCalcSize_Params NEWTEXTMETRIC  > TNewTextMetric OFSTRUCT  > TOFStruct OUTLINETEXTMETRIC  > TOutlineTextMetric PAINTSTRUCT  > TPaintStruct PALETTEENTRY  > TPaletteEntry PANOSE  > TPanose PATTERN  > TPattern POINTFX  > TPointFX PSTR  > PChar PWSTR  > PWideChar RASTERIZER_STATUS  > TRasterizer_Status RGBQUAD  > TRGBQuad RGBTRIPLE  > TRGBTriple SEGINFO  > TSegInfo SHORT  > SmallInt SHORT INT  > SmallInt SIZE  > TSize TEXTMETRIC  > TTextMetric TPOINT  > TPoint TRECT  > TRect TTPOLYCURVE  > TTTPolyCurve TTPOLYGONHEADER  > TPolygonHeader UINT  > Word UNSIGNED  > Word UNSIGNED CHAR  > Byte UNSIGNED INT  > Word UNSIGNED LONG  > LongInt(DWORD) UNSIGNED LONG INT  > LongInt UNSIGNED SHORT  > Word UNSIGNED SHORT INT  > Word VOID*  > Pointer WINDOWPLACEMENT  > indowPlacement WINDOWPOS  > indowPos WNDCLASS  > ndClass WORD  > Word

lishixinzhi/Article/program/Delphi/201311/24758

你提供的程序是没有主程序的,所以转换之后的代码也不能作为独立程序编译运行。

C/C++语言

#include <string.h>

#define  byte unsigned char

struct tag_Buffer

{

    byte    Head   //  头标志 

    byte    Len    //  包长度 

}

typedef struct tag_Buffer _Buffer

byte c_key[32] = { 

    0xAB, 0x11, 0xCD, 0xFE, 0x18, 拦此数0x23, 0xC5, 0xA3, 0xCA, 0x33,

    0xC1, 0xCC, 0x66, 0x67, 0x21, 0xF3, 0x32, 0x12, 0x15, 0x35,

    0x29, 0xFF, 0xFE, 0x1D, 0x44, 0xEF, 0xCD, 0x41, 0x26, 0x3C,

    0x4E, 0x4D}    //  key密钥

//  加密    扒御参数:IN OUT数据源, IN长度  返回:加密长度

int MyEncode(void *Buffer, int Len)

{

    byte    *Src

    int     i, j

    byte    x

    int     Result

    

    Src =   (byte *)Buffer

    if (*Src == 0xC1)

    {

        Src ++

        Src ++

        x   =   *Src

        Src ++

        for (i = 3 i <= Len - 1 i++)

        {

            j   = 简首  i & 0x8000001F

            *Src=   *Src ^ x ^ c_key[j]

            x   =   *Src

            Src ++

        }

        Result  =   Len

    }

    else

        Result  =   -1

    return  Result

}

//  解密    参数:IN OUT数据源, IN长度  返回:解密长度

int MyDecode(void *Buffer, int Len)

{

    byte    Src[101]

    int     i

    int     Result

    

    memcpy(Src, Buffer, Len)

    if (Src[0] == 0xC1)

    {

        for (i = Len-1 i>=3 i--)

        {

            Src[i] = Src[i] ^ Src[i-1] ^ c_key[i]

        }

        Result  =   Len

        memcpy(Buffer, Src, Len)

    }

    else

        Result  =   -1

    return  Result

}

此代码在gcc/g++ 4.9.2版本编译通过(需要额外添加main函数)。

在C++中,由于C++语言的特性

建议将

int MyEncode(void *Buffer, int Len)

int MyDecode(void *Buffer, int Len)

修改为

int MyEncode(void *Buffer, const int &Len) int MyDecode(void *Buffer, const int &Len)

通过严格的限制其IN特征来提高代码效率。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12462514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存