here is my code:
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "myGame4.h"
#include "myGame4GameMode.h"
#include "myGame4Character.h"
#include "ice/MyPrinterI.h"
#include "AllowWindowsPlatformTypes.h"
#pragma push_macro("check")
#pragma push_macro("verify")
#undef check
#undef verify
#include <Ice/Ice.h>
#include <IceUtil/IceUtil.h>
#include <Printer.h>
#pragma pop_macro("verify")
#pragma pop_macro("check")
#include <StringConv.h>
Ice::CommunicatorPtr ic;
static Ice::ObjectPtr object;
class PrinterI : public Demo::Printer {
public:
virtual void printString(const string& s, const Ice::Current&);
};
void PrinterI::printString(const string& s, const Ice::Current&)
{
wstring wstr = IceUtil::stringToWstring(s);
FString str = FString(wstr.c_str());
UE_LOG(LogTemp, Error, TEXT("from ice msg:%s"), *(str));
}
//UPROPERTY()
//Ice::ObjectPtr object;
AmyGame4GameMode::AmyGame4GameMode()
{
// set default pawn class to our Blueprinted character
static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPersonCPP/Blueprints/ThirdPersonCharacter"));
if (PlayerPawnBPClass.Class != NULL)
{
DefaultPawnClass = PlayerPawnBPClass.Class;
}
if (object == NULL)
{
object = new PrinterI;
}
}
void AmyGame4GameMode::BeginPlay()
{
ic = Ice::initialize();
try {
Ice::ObjectAdapterPtr adapter =
ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 20001 -h 127.0.0.1");
adapter->add(object, ic->stringToIdentity("SimplePrinter"));
adapter->activate();
UE_LOG(LogTemp, Error, TEXT("ice start success 测试中文"));
}
catch (const Ice::Exception& e) {
cerr << e << endl;
UE_LOG(LogTemp, Error, TEXT("ICE 异常"));
}
catch (const char* msg) {
cerr << msg << endl;
UE_LOG(LogTemp, Error, TEXT("ICE 异常"));
}
Super::BeginPlay();
}
void AmyGame4GameMode::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
UE_LOG(LogTemp, Error, TEXT("游戏结束"));
ic->shutdown();
ic->destroy();
UE_LOG(LogTemp, Error, TEXT("Ice销毁"));
Super::EndPlay(EndPlayReason);
}
This is my JAVA code
public class Client {
public static void main(String[] args) {
Communicator ic = Ice.Util.initialize();
PrinterPrx twoway = PrinterPrxHelper.checkedCast(ic.stringToProxy("SimplePrinter:default -p 20001 -h 127.0.0.1"));
for (int i = 0; i < 10; i++) {
twoway.printString("msg"+i);
System.out.println("send:" + i);
}
ic.shutdown();
ic.destroy();
}
}
When i send some short string msg it’s OK but,when i send a long string its’s crashed
myGame4-Win64-DebugGame.exe!FMallocBinned::FreeInternal(void *) C++
myGame4-Win64-DebugGame.exe!operator delete(void * Ptr) 行 6 C++
[外部代码]
> myGame4-Win64-DebugGame.exe!PrinterI::printString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & s, const Ice::Current & __formal) 行 38 C++
myGame4-Win64-DebugGame.exe!Demo::Printer::___printString(IceInternal::Incoming & __inS, const Ice::Current & __current) 行 171 C++
ice36.dll!000000006ccdaa71() 未知
ice36.dll!000000006ccbae7b() 未知
ice36.dll!000000006ccb7214() 未知
ice36.dll!000000006ccbc397() 未知
ice36.dll!000000006cdc14c2() 未知
ice36.dll!000000006cdc105e() 未知
iceutil36.dll!000000006cc0f6af() 未知
[外部代码]
I do not know where I was wrong
Thanks