我使用的是vs2015,x86
配置方式参照
https://forums.unrealengine.com/showthread.php?65944-c-Mysql-database-error&highlight=mysql
首先是我的文件夹结构
主要展示下我的IceSupport.Build.cs文件
using UnrealBuildTool;
using System.IO;
public class IceSupport : ModuleRules
{
public IceSupport(TargetInfo Target)
{
PublicDependencyModuleNames.AddRange(
new string[] {
"Core"
});
//string ice_home = "E:/Program Files (x86)/ZeroC/Ice-3.6.1/";
//PublicIncludePaths.Add(ice_home + "include");
//PublicLibraryPaths.Add(ice_home + "lib/vc140");
//PublicAdditionalLibraries.Add("iced.lib");
//PublicAdditionalLibraries.Add("iceutild.lib");
// PublicDelayLoadDLLs.Add("ice36d.dll");
//PublicDelayLoadDLLs.Add("iceutil36d.dll");
bUseRTTI = true;
UEBuildConfiguration.bForceEnableExceptions = true;
string ModulePath = Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name));
string ThirdPartyPath = Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/"));
string IcePath = ThirdPartyPath + "Ice-3.6.1/";
string IceLibraryPath = IcePath + "vc140/";
string IceIncludePath = IcePath + "include/";
PublicLibraryPaths.Add(IceLibraryPath);//添加ICE库目录 vs2015使用vc140目录,同时在系统环境变量PATH中配置%ICE_HOME%\bin\vc140 确保能正确加载dll
PublicIncludePaths.Add(IceIncludePath);//添加ICEinclude目录
PublicIncludePaths.Add(IcePath + "my/"); //使用slice(*.ice)文件生成c++代码的目录
PublicAdditionalLibraries.Add(Path.Combine(IceLibraryPath, "ice.lib"));//这里不要使用debug版库,不管是debug模式
PublicAdditionalLibraries.Add(Path.Combine(IceLibraryPath, "iceutil.lib"));
}
}
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class myGame3 : ModuleRules
{
public myGame3(TargetInfo Target)
{
//添加ICE模块
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore","IceSupport" });
bUseRTTI = true;//这个很重要
}
}
然后打开虚幻编辑器,点击菜单,点击刷新VS项目,然后点击为windows烘焙内容,用于能在vs中调试使用,否则vs中运行会提示找不到文件的一个提示
接下来就是测试ICE,我是在GameMode里面测试
myGame3GameModel.h
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "GameFramework/GameMode.h"
#include "myGame3GameMode.generated.h"
UCLASS(minimalapi)
class AmyGame3GameMode : public AGameMode
{
GENERATED_BODY()
public:
AmyGame3GameMode();
virtual void BeginPlay() override;
};
myGame3GameMode.cpp
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "myGame3.h"
#include "myGame3GameMode.h"
#include "myGame3Character.h"
//#pragma comment(lib, "iced.lib")
//#pragma comment(lib, "iceutild.lib")
//由于ICE中和虚幻中定义了相同的宏先取消宏定义
#pragma push_macro("check")
#pragma push_macro("verify")
#undef check
#undef verify
//加入虚幻的头文件
#include "AllowWindowsPlatformTypes.h"
#include <IceSupport.h>
#include <Ice/Ice.h>
#include "HideWindowsPlatformTypes.h"
//恢复虚幻的宏定义
#pragma pop_macro("verify")
#pragma pop_macro("check")
#include <Printer.h>
#include <iostream>
using namespace std;
using namespace Demo;
class PrinterI : public Printer {
public:
virtual void printString(const string& s, const Ice::Current&);
};
AmyGame3GameMode::AmyGame3GameMode()
{
// 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;
}
}
void AmyGame3GameMode::BeginPlay()
{
Ice::CommunicatorPtr ic;
UE_LOG(LogTemp, Error, TEXT("this startedaaaaaaaaaa"));
ic = Ice::initialize();
Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints("aaaaaaaaaaaaaaaa", "default -p 20001 -h 127.0.0.1");
Ice::ObjectPtr object = new PrinterI;
adapter->add(object, ic->stringToIdentity("SimplePrinter"));
adapter->activate();
}
void PrinterI::printString(const string & s, const Ice::Current &)
{
UE_LOG(LogTemp, Error, TEXT("hahahah "));
}
注意
我的使用slice(*.ice)文件生成c++代码的头文件放在 项目文件夹\ThirdParty\Ice-3.6.1\my 你也可以放在Source\IceSupport\Public目录
cpp文件放在Source\IceSupport\Private目录
OK 现在就可以测试运行了