1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#include <Test.h>
#include <TestHelper.h>
#if defined(_MSC_VER)
# pragma comment(lib, ICE_LIBNAME("gencode"))
#endif
using namespace std;
ICE_DECLSPEC_EXPORT void
consume(const Ice::ObjectPtr& o, const Ice::ObjectPrxPtr& p)
{
cout << "testing dynamic cast across libraries... " << flush;
//
// Make sure dynamic cast works as expected
// and exception raised by a shared library can be caught by another
// shared library
//
Test::MyInterfacePtr servant = ICE_DYNAMIC_CAST(Test::MyInterface, o);
test(servant);
#ifdef ICE_CPP11_MAPPING
auto proxy = dynamic_pointer_cast<Test::MyInterfacePrx>(p);
#else
Test::MyInterfacePrx proxy = dynamic_cast<IceProxy::Test::MyInterface*>(p.get());
#endif
test(proxy);
proxy->op(false);
servant->op(false, Ice::emptyCurrent);
cout << "ok" << endl;
cout << "testing exceptions thrown across libraries... " << flush;
try
{
proxy->op(true);
}
catch(const Test::UserError&)
{
// expected
}
catch(...)
{
test(false);
}
try
{
servant->op(true, Ice::emptyCurrent);
}
catch(const Test::UserError&)
{
// expected
}
catch(...)
{
test(false);
}
cout << "ok" << endl;
}
|