Use C++Builder, connect to AWS API Gateway+(Node.js)Lambda with JSON[JAPAN]
Use C++Builder, connect to AWS API Gateway+Lambda with JSON.
Inside of AWS Lambda echoes the contents of post JSON.
///// exports.handler = (event, context, callback) => { callback(null, event); };
The function name is "test_function". And save it.
Make this Lambda"test_function" accessible from the Internet using Amazon API Gateway.
//// TJSONArray* __fastcall EchoStrings(TStrings* ss);
It seems of member function of DataSnap sample"EchoString()".
In TButton to make such Form, to call the EchoStrings(TStrings* ss).
//// TStringStream* __fastcall TForm1::str_stream_to_json(TStrings* ss) { TStringStream* ms{nullptr}; auto ja = new TJSONArray(); int i{0}; try { try { for (auto line_: ss) { ja->Add(new TJSONObject(new TJSONPair( Format("value_", ARRAYOFCONST((i)) ), line_) )); i++; } } catch(Exception& e1){} ms = new TStringStream(ja->ToJSON()); } __finally { delete ja; } return ms; } TJSONArray* __fastcall TForm1::EchoStrings(TStrings* ss) { std::unique_ptr<TNetHTTPClient> net_cliant_{new TNetHTTPClient(nullptr)}; auto ms = str_stream_to_json(ss); _di_IHTTPResponse http_; net_cliant_->ContentType = "application/json"; if (ms != nullptr) { try { http_ = net_cliant_->Post( "https://******/test-function?a=1", ms); std::unique_ptr<TStringStream> ms1 = std::make_unique<TStringStream>(static_cast<UnicodeString>(L""), TEncoding::UTF8, true); ms1->LoadFromStream(http_->ContentStream); ms1->Position = 0; return static_cast<TJSONArray*>(( static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(ms1->DataString)) )->GetValue("body-json")); } catch(Exception& e1) { return nullptr; } } else return nullptr; } void __fastcall TForm1::Button1Click(TObject *Sender) { for (auto value_: EchoStrings(Memo1->Lines)) { Memo1->Lines->Append( static_cast<TJSONObject* >(value_)->GetValue("value_")->Value()); } }
Return contents written in Memo1 as TStringStream.
Reply in JSON like this.This is data returned by the Amazon API Gateway.
{ "body-json": [ { "value_": "English" }, { "value_": "日本語" }, { "value_": "русский" }, { "value_": "한국" } ], "context": { "user-arn": "" }, "params": { "X-Forwarded-Proto": "https" }, "stage-variables": {} }


Comments
-
zs C30403 Monday, 23 January 2017
procedure TMainForm.TabSheetClose(Sender: TObject; var AllowClose: Boolean);
var
Ts : TUniTabSheet;
Nd : TUniTreeNode;
begin
Ts := Sender as TUniTabSheet;
Nd := Pointer(Ts.Tag);
if Assigned(Nd) then
begin
Nd.Data := nil;
if NavTree.Selected = Nd then
NavTree.Selected := nil;
end;
end;
procedure TMainForm.NavTreeClick(Sender: TObject);
var
Nd : TUniTreeNode;
Ts : TUniTabSheet;
FrC : TUniFrameClass;
Fr : TUniFrame;
FClassName, iconfile, Path: string;
index: Integer;
begin
Path := UniServerModule.StartPath + 'units\';
Nd := NavTree.Selected;
if Nd.Count = 0 then
begin
Ts := Nd.Data;
if not Assigned(Ts) then
begin
Ts := TUniTabSheet.Create(Self);
Ts.PageControl := UniPageControl1;
Ts.Closable := True;
Ts.OnClose := TabSheetClose;
Ts.Tag := NativeInt(Nd);
Ts.Caption := Nd.Text;
Ts.ImageIndex := Nd.ImageIndex;
FClassName := 'TUni' + FileNames.Values[Nd.Text];
FrC := TUniFrameClass(FindClass(FClassName));
Fr := FrC.Create(Self);
Fr.Align := alClient;
Fr.Parent := Ts;
Nd.Data := Ts;
end;
UniPageControl1.ActivePage := Ts;
end;
end;
Convert To C++Builder ,thanks -
zs C30403 Monday, 23 January 2017
Main.cpp(41): parsing: void _fastcall TMainForm::UniFormCreate(TObject *)
[bcc32 Error] Main.cpp(218): E2034 Cannot convert 'TComponent *' to 'int'
Full parser context
Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
[bcc32 Error] Main.cpp(219): E2451 Undefined symbol 'nullptr'
Full parser context
Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
[bcc32 Error] Main.cpp(221): E2451 Undefined symbol 'FCurrentFrame'
Full parser context
Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
[bcc32 Error] Main.cpp(221): E2034 Cannot convert 'TMainForm * const' to 'TMetaClass *'
Full parser context
Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
[bcc32 Error] Main.cpp(224): E2451 Undefined symbol 'FCurrentFrame'
Full parser context
Main.cpp(204): parsing: void _fastcall TMainForm::OpenForm(UnicodeString,UnicodeString)
[bcc32 Error] Main.cpp(224): E2031 Cannot cast from 'int' to 'TMetaClass * *'
Full parser context
Main.cpp(218,46): error E2034: E2034 Cannot convert 'TComponent *' to 'int'
Main.cpp(219,19): error E2451: E2451 Undefined symbol 'nullptr'
Main.cpp(221,15): error E2451: E2451 Undefined symbol 'FCurrentFrame'
Main.cpp(221,39): error E2034: E2034 Cannot convert 'TMainForm * const' to 'TMetaClass *'
Main.cpp(224,15): error E2451: E2451 Undefined symbol 'FCurrentFrame'
Main.cpp(224,49): error E2031: E2031 Cannot cast from 'int' to 'TMetaClass * *' -
zs C30403 Sunday, 22 January 2017
procedure TfrmMain.OpenForm(Caption,FormClassName:string);
var
i:integer;
sheet:TUniTabSheet;
begin
for i := 0 to pgeMain.PageCount-1 do
begin
if pgeMain.Pages[i].Caption=Caption then
begin
pgeMain.ActivePageIndex:=i;
exit;
end;
end;
sheet:=TUniTabSheet.Create(Self);
sheet.Closable:=True;
sheet.Caption:=Caption;
sheet.PageIndex:=i+1;
sheet.PageControl:=pgeMain;
FCurrentFrame:=TUniFrameClass(FindClass(FormClassName)).Create(Self);
FCurrentFrame.Align:=alClient;
FCurrentFrame.Parent:=sheet;
pgeMain.ActivePage:=sheet;
end;
Convert To C++Builder ,thanks -
h.mohri Sunday, 22 January 2017
struct TUniTabSheet :TTabSheet
{
bool bClosable{false};
__fastcall TUniTabSheet(TComponent* Owner): TTabSheet(Owner){}
__property bool Closable = {read=bClosable, write=bClosable};
};
struct TUniFrameClass: TFrame
{
__fastcall TUniFrameClass(TComponent* Owner): TFrame(Owner){}
};
TUniFrameClass* FCurrentFrame{nullptr};
void __fastcall TForm1::OpenForm(String Caption_, String FormClassName)
{
TPageControl* pgeMain{new TPageControl(this)};
for (int i = 0; i PageCount; i++)
{
if (SameStr(pgeMain->Pages[i]->Caption,Caption_))
pgeMain->ActivePageIndex = i;
}
TUniTabSheet* sheet{new TUniTabSheet(this)};
sheet->Closable = true;
sheet->Caption = Caption_;
sheet->PageIndex = pgeMain->ActivePageIndex+1;
sheet->PageControl = pgeMain;
auto temp = this->FindComponent(FormClassName);
if (temp == nullptr)
{
FCurrentFrame = new TUniFrameClass(this);
}
else
FCurrentFrame = static_cast<TUniFrameClass*>(temp);
FCurrentFrame->Align = alClient;
FCurrentFrame->Parent = sheet;
pgeMain->ActivePage = sheet;
} -
Please login first in order for you to submit comments
- Page :
- 1
procedure TMainForm.TabSheetClose(Sender: TObject; var AllowClose: Boolean);
var
Ts : TUniTabSheet;
Nd : TUniTreeNode;
begin
Ts := Sender as TUniTabSheet;
Nd := Pointer(Ts.Tag);
if Assigned(Nd) then
begin
Nd.Data := nil;
if NavTree.Selected = Nd then
NavTree.Selected := nil;
end;
end;
procedure TMainForm.NavTreeClick(Sender: TObject);
var
Nd : TUniTreeNode;
Ts : TUniTabSheet;
FrC : TUniFrameClass;
Fr : TUniFrame;
FClassName, iconfile, Path: string;
index: Integer;
begin
Path := UniServerModule.StartPath + 'units\';
Nd := NavTree.Selected;
if Nd.Count = 0 then
begin
Ts := Nd.Data;
if not Assigned(Ts) then
begin
Ts := TUniTabSheet.Create(Self);
Ts.PageControl := UniPageControl1;
Ts.Closable := True;
Ts.OnClose := TabSheetClose;
Ts.Tag := NativeInt(Nd);
Ts.Caption := Nd.Text;
Ts.ImageIndex := Nd.ImageIndex;
FClassName := 'TUni' + FileNames.Values[Nd.Text];
FrC := TUniFrameClass(FindClass(FClassName));
Fr := FrC.Create(Self);
Fr.Align := alClient;
Fr.Parent := Ts;
Nd.Data := Ts;
end;
UniPageControl1.ActivePage := Ts;
end;
end;
Convert To C++Builder ,thanks