• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

用python4delphi开发一个rabbitmq应用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

你可以从https://github.com/pyscripter/python4delphi下载vcl。
VCL可以支持python 2.x到3.x,只需要你修改* .inc文件! 在我的示例中,我使用变量import * .py并执行它。

procedure TForm1.btnPublishClick(Sender: TObject);
var
a, main: variant;
folder, aMessage: string;
vJpegStream : TMemoryStream;
vStrStream: TStringStream;
vEncd: TIdEncoderMIME;
vS, vMSG_ID, vHeads: string;
begin
// importing an external module and using it
// first, extend the path with our current folder
_folder := ExtractFilePath(Application.ExeName);
if (Length(_folder) > 0) and (_folder[Length(_folder)] = '\') then
Delete(_folder, Length(_folder), 1);
if not Boolean(SysModule.path.Contains(_folder)) then
SysModule.path.insert(0, _folder);
// import the module
_main := Import('testPika');
Assert( VarIsPythonFunction(__main__.put_message));
Assert( VarIsPythonCallable(__main__.put_message));
Assert( VarIsPythonDict(__main__.vHeaders));

// call one of his functions
// initialize the operands
a := NewPythonDict;
Assert(VarIsPython(a));
Assert(VarIsPythonMapping(a));
Assert(VarIsPythonDict(a));



adsPic.Close;
adsPic.CommandText := 'Select Top ' + fTopCount + ' * from ' + fTable;
adsPic.Open;
while not adsPic.Eof do
begin

vStrStream := TStringStream.Create('');
vJpegStream := TMemoryStream.Create;
TBlobField(adsPic.FieldByName(fMessageBody)).SaveToStream(vJpegStream);

vMSG_ID := adsPic.FieldByName(fMessageId).AsString;
//TIdEncoderMIME.EncodeStream: Indy function to encode stream content as base64
//注意:用EncdDecd.EncodeStream 方法转成的base64串会每隔76个字符后面加写#$D#$A,后者#012;


//这句非常重要,否则vS为空
vJpegStream.Position := 0;

//用这个函数编码后的图片,接收解码后才会正常显示!!!
vS := TIdEncoderMIME.EncodeStream(vJpegStream, vJpegStream.Size);

vHeads := '''Year'':' + adsPic.FieldByName('pic_year').AsString +
',''Month'':' + adsPic.FieldByName('pic_month').AsString +
',''Day'':' + adsPic.FieldByName('pic_day').AsString + '';
edt1.Text := vHeads;
main.vHeaders.clear();

// There is a bug in D2010 in which Char('a') gets translated to integer parameter
a.SetItem( string('Year'), adsPic.FieldByName('pic_year').AsInteger );
a.SetItem( string('Month'), adsPic.FieldByName('pic_month').AsInteger );
a.SetItem( string('Day'), adsPic.FieldByName('pic_day').AsInteger );

main.vHeaders := a;


try

if main.put_message(vS, vMSG_ID) = True Then
Memo1.Lines.Add(DateTimeToStr(Now)+ ' MessageID:' + vMSG_ID + ' 投递成功!');

except on E: Exception do
Memo1.Lines.Add(E.Message);
end;

vJpegStream.Free;
vStrStream.Free;
adsPic.Next;

end;

adsPic.Close;
end;


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Matlab学习笔记发布时间:2022-07-18
下一篇:
matlab代码学习_2018-7-28发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap