Мне нужно скомпилировать существующую библиотеку сообщений, созданную с помощью ZeroC ICE, с c ++ clr.
Я занимаюсь этим какое-то время, и мне не повезло.
У меня есть очень простой файл сообщений .ice. После создания файлов cpp и h для этого я пытаюсь скомпилировать их в .dll. Мои аргументы командной строки slice2cpp:
C:\Program Files (x86)\ZeroC\Ice-3.5.1\bin\slice2cpp.exe --depend --dll-export=ENABLE_DLL -I"C:\Program Files (x86)\ZeroC\Ice-3.5.1\slice" -I".\.." --underscore "E:\test\platform\platform\testMessage.ice"
Это генерирует файлы testMessage.cpp и testMessage.h. При попытке их скомпилировать я получаю сообщение об ошибке:
Error 7 error LNK2028: unresolved token (0A00098D) "class IceUtil::Shared * __cdecl IceInternal::upCast(class IceInternal::ObjectFactoryManager *)" (?upCast@IceInternal@@$$FYAPEAVShared@IceUtil@@PEAVObjectFactoryManager@1@@Z) referenced in function "public: __cdecl IceInternal::Handle<class IceInternal::ObjectFactoryManager>::Handle<class IceInternal::ObjectFactoryManager>(class IceInternal::Handle<class IceInternal::ObjectFactoryManager> const &)" (??0?$Handle@VObjectFactoryManager@IceInternal@@@IceInternal@@$$FQEAA@AEBV01@@Z) E:\test\platform\platform\testMessage.obj platform
Как обычно с Ice, мне нужно связать файлы Iced.lib и IceUtild.lib. Я компилирую без предварительно скомпилированных заголовков и параметра / clr (не чистого clr или безопасного) с использованием VS2013. Тело файла testMessage.ice очень простое.
#ifndef _MESSAGE_ICE_
#define _MESSAGE_ICE_
module messaging {
class Message
{
string clientId;
string origin;
string destination;
string messageType;
string suffix;
};
sequence<Message> MessageSeq;
class NonQueuedMsg extends messaging::Message {};
};
#endif
Компиляция без опции CLR успешна.
Полагаю, все это вызвано моим незнанием c ++ clr. Любая помощь будет оценена.