C++ cli c++;带ZeroC Ice的clr 3.5.1 我需要编译一个使用C++的CLIC.< /P>使用ZOROC的ICE生成的现有消息库。

C++ cli c++;带ZeroC Ice的clr 3.5.1 我需要编译一个使用C++的CLIC.< /P>使用ZOROC的ICE生成的现有消息库。,c++-cli,ice,C++ Cli,Ice,我做这件事已经有一段时间了,现在运气不好 我定义了一个非常简单的.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

我做这件事已经有一段时间了,现在运气不好

我定义了一个非常简单的.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
错误7错误LNK2028:未解析的令牌(0A00098D)“类IceUtil::Shared*\uu cdecl ICEInteral::upCast(类ICEInteral::ObjectFactoryManager*)”(?upCast@IceInternal@@$$FYAPEAVShared@IceUtil@@PEAVObjectFactoryManager@1@@Z) 在函数“public:u cdecl IceInternal::Handle::Handle(类IceInternal::Handle const&)”中引用(??0?$Handle@VObjectFactoryManager@ICEInteral@@@ICEInteral@@$$FQEAA@AEBV01@@Z) E:\test\platform\platform\testMessage.obj platform
与Ice一样,我必须链接Iced.lib和IceUtild.lib文件。 我编译时没有预先编译的头和/clr选项(不是纯clr或safe) 使用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
\ifndef\u消息\u ICE_
#定义消息_
模块消息传递{
类消息
{
字符串clientId;
弦源;
字符串目的地;
字符串消息类型;
字符串后缀;
};
序列MessageSeq;
类NonQueuedMsg扩展了messaging::Message{};
};
#恩迪夫
在没有CLR选项的情况下编译会成功

我想这都是因为我对C++ CLR的缺乏熟悉。
任何帮助都将不胜感激。

在我的项目迁移到vs 2013之后,我遇到了同样的问题

<>工程C++用ICE编译好 但是带有ice的项目c++/cli没有链接

我修复了ObjectFactoryManagerF.h中的链接问题:

#ifdef __cplusplus_cli
IceUtil::Shared* upCast(ObjectFactoryManager* p) { return (IceUtil::Shared*) p; };
#else
IceUtil::Shared* upCast(ObjectFactoryManager* );
#endif

在我在他们的论坛上读到他们不支持C++/CLI和ICE生成的代码后,我停止了让它们协同工作的尝试。
我所做的..我在客户端制作了本机静态库,其中我有C++/CLI。静态库完全封装了所有通信内容,并从C++/CLI部分引用。因此,我得到了一个混合的(C++/CLR)推荐的规则汇编。它运行良好,而且我有了更简单的可移植应用程序。

这种语言叫做C++/CLI。CLR是运行时环境。好的。编译器选项是/CLR对吗?哦,天哪,模板链接错误。你必须看到好的一面。当你弄明白这一点时,你再也不会弄错名称了。Character-建筑材料。