[tao-users] Windows 10 Entry Point Error

maggiari at b-k.it maggiari at b-k.it
Tue Jan 23 05:14:26 CST 2018


Hello!

Any help on the following would be great. Please let me know if I have to
provide more details.

ACE+TAO VERSION: 6.4.6

HOST MACHINE and OPERATING SYSTEM: Windows 10 Home x64

COMPILER NAME AND VERSION (AND PATCHLEVEL): Using MS visual studio 2017
community edition 15.4.0

THE $ACE_ROOT/ace/config.h FILE: #include "ace/config-win32.h"

AREA/CLASS/EXAMPLE AFFECTED: Compilation is clean, linking is clean.

DOES THE PROBLEM AFFECT: EXECUTION?
Yes.

SYNOPSIS
Application Run-time failure involves:

The procedure entry point ??shortSequence@@QEAA at AEBV0@@Z could not be
located in the dynamic link library myexe.exe

The procedure entry point ??getObjectID at ComServer@Sim@@UEAA_NPEBDAEAH at Z
could not be located in the dynamic link library SimLib.dll

The procedure entry point
??getCommandList at ComEntity@Sim@@UEAA_NV?$TAP_Seq_Out_T at VComCommandList@@@@Z
could not be located in the dynamic link library SimTr.dll

DESCRIPTION
This is my situation: I come from ACE+TAO 6.0.1 (Win 7) compiled for x64
arch and this works fine. I'm moved on VS2017 using ACE+TAO 6.4.6. ACE+TAO
compilation works fine.
I use and link ACE+TAO libs
(TAO_PortableServer.lib,TAO_AnyTypeCode.lib,TAO_IORTable.lib,TAO.lib,ACE.lib)
in some my dynamic libraries (which compile and link fine, all classes
export symbols with __declspec(dllexport)) and then I link these libraries
with a my application.

Running this application I got a sequence of run-time failure at dynamic
library loading time (works fine with older ACE+TAO 6.0.1 under Win 7):

The procedure entry point ??shortSequence@@QEAA at AEBV0@@Z could not be
located in the dynamic link library myexe.exe

The procedure entry point ??getObjectID at ComServer@Sim@@UEAA_NPEBDAEAH at Z
could not be located in the dynamic link library SimLib.dll

The procedure entry point
??getCommandList at ComEntity@Sim@@UEAA_NV?$TAP_Seq_Out_T at VComCommandList@@@@Z
could not be located in the dynamic link library SimTr.dll

All entry point errors speaks about some IDL types/interfaces. Looking
inside libraries (with VS dumpbin) these symbols there are.

I compile the IDL with this command:

tao_idl -Wb,export_macro=__declspec(dllexport) Sim.idl

I attach my IDL at the mail end. I suspect I need to update the IDL
somehow or use others IDL options to compile.

It's strange because I have to say that under a Linux environment works
fine with the same ACE+TAO version!

Can you give me some ideas?

Many thanks,

Best Regards

Dario

--------------------------------- IDL ----------------------------
typedef long IDType;


struct vector2f
{
  float x;
  float y;
};


struct vector2d
{
  double x;
  double y;
};


struct vector3f
{
  float x;
  float y;
  float z;
};


struct vector3d
{
  double x;
  double y;
  double z;
};


enum DataType
{
  DT_BOOLEAN,
  DT_CHAR,
  DT_SHORT,
  DT_USHORT,
  DT_LONG,
  DT_ULONG,
  DT_FLOAT,
  DT_DOUBLE,
  DT_VECTOR2F,
  DT_VECTOR2D,
  DT_VECTOR3F,
  DT_VECTOR3D,
  DT_STRING,
  DT_BOOLEAN_SEQUENCE,
  DT_CHAR_SEQUENCE,
  DT_SHORT_SEQUENCE,
  DT_USHORT_SEQUENCE,
  DT_LONG_SEQUENCE,
  DT_ULONG_SEQUENCE,
  DT_FLOAT_SEQUENCE,
  DT_DOUBLE_SEQUENCE,
  DT_VECTOR2F_SEQUENCE,
  DT_VECTOR2D_SEQUENCE,
  DT_VECTOR3F_SEQUENCE,
  DT_VECTOR3D_SEQUENCE,
  DT_STRING_SEQUENCE
};

typedef sequence<boolean>        booleanSequence;
typedef sequence<char>           charSequence;
typedef sequence<short>          shortSequence;
typedef sequence<unsigned short> ushortSequence;
typedef sequence<long>           longSequence;
typedef sequence<unsigned long>  ulongSequence;
typedef sequence<float>          floatSequence;
typedef sequence<double>         doubleSequence;
typedef sequence<vector2f>       vector2fSequence;
typedef sequence<vector2d>       vector2dSequence;
typedef sequence<vector3f>       vector3fSequence;
typedef sequence<vector3d>       vector3dSequence;
typedef sequence<string>         stringSequence;


union DataValue switch (DataType)
{
  case DT_BOOLEAN:
    boolean booleanData;
  case DT_CHAR:
    char charData;
  case DT_SHORT:
    short shortData;
  case DT_USHORT:
    unsigned short ushortData;
  case DT_LONG:
    long longData;
  case DT_ULONG:
    unsigned long ulongData;
  case DT_FLOAT:
    float floatData;
  case DT_DOUBLE:
    double doubleData;
  case DT_VECTOR2F:
    vector2f vector2fData;
  case DT_VECTOR2D:
    vector2d vector2dData;
  case DT_VECTOR3F:
    vector3f vector3fData;
  case DT_VECTOR3D:
    vector3d vector3dData;
  case DT_STRING:
    string stringData;
  case DT_BOOLEAN_SEQUENCE:
    booleanSequence booleanSequenceData;
  case DT_CHAR_SEQUENCE:
    charSequence charSequenceData;
  case DT_SHORT_SEQUENCE:
    shortSequence shortSequenceData;
  case DT_USHORT_SEQUENCE:
    ushortSequence ushortSequenceData;
  case DT_LONG_SEQUENCE:
    longSequence longSequenceData;
  case DT_ULONG_SEQUENCE:
    ulongSequence ulongSequenceData;
  case DT_FLOAT_SEQUENCE:
    floatSequence floatSequenceData;
  case DT_DOUBLE_SEQUENCE:
    doubleSequence doubleSequenceData;
  case DT_VECTOR2F_SEQUENCE:
    vector2fSequence vector2fSequenceData;
  case DT_VECTOR2D_SEQUENCE:
    vector2dSequence vector2dSequenceData;
  case DT_VECTOR3F_SEQUENCE:
    vector3fSequence vector3fSequenceData;
  case DT_VECTOR3D_SEQUENCE:
    vector3dSequence vector3dSequenceData;
  case DT_STRING_SEQUENCE:
    stringSequence stringSequenceData;
};


struct ComData
{
  string    Name;
  DataValue Value;
};

typedef sequence<ComData> ComDataList;


struct ComCommand
{
  string      Name;
  ComDataList Parameters;
};

typedef sequence<ComCommand> ComCommandList;


struct ComReply
{
  string      Name;
  boolean     Success;
  ComDataList ReturnValues;
};


module Sim
{
  struct ComEntityDescriptor
  {
    string Name;
    string Type;
  };

  typedef sequence<ComEntityDescriptor> ComEntityDescriptorList;

  interface ComEntity
  {
    ComEntityDescriptor getDescriptor();

    boolean getParametersList(out ComDataList p_Parameters);

    boolean getParameter(inout ComData p_Parameter);
    boolean setParameter(in    ComData p_Parameter);

    boolean getParameters(inout ComDataList p_Parameters);
    boolean setParameters(in    ComDataList p_Parameters);

    boolean getCommandsList(out ComCommandList p_Commands);
    ComReply executeCommand(in ComCommand p_Command, in ComEntity
p_Commander);
    oneway void invokeCommand(in ComCommand p_Command, in ComEntity
p_Commander, in boolean p_IsReplyRequested);
    oneway void replyCallback(in ComReply p_Reply, in ComEntity p_Replier);
  };

  interface ComClient
  {
    string getUniqueID();
    string getUDPAddress();

    stringSequence getEntitiesAvailableTypesList();
    boolean createEntity(in ComEntityDescriptor p_ComEntityDescriptor);
    boolean destroyEntity(in ComEntityDescriptor p_ComEntityDescriptor);

    ComEntityDescriptorList getEntityDescriptorList();
    ComEntity getEntity(in ComEntityDescriptor p_ComEntityDescriptor);

    oneway void notifyEntityRegistration  (in ComEntityDescriptor
p_ComEntityDescriptor);
    oneway void notifyEntityDeregistration(in ComEntityDescriptor
p_ComEntityDescriptor);

    oneway void setObjectDOF(in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID, in vector3d p_Position, in vector3d p_Rotation);
    oneway void scaleObject (in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID, in vector3d p_Scale);
    oneway void attachObject(in double p_Time, in IDType p_ObjectID, in
string p_AttachToObject, in string p_AttachToLabel);
    oneway void detachObject(in double p_Time, in IDType p_ObjectID);
    oneway void hideObject  (in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID);
    oneway void showObject  (in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID);
  };

  interface ComServer
  {
    boolean registerClient  (in Sim::ComClient p_ComClient);
    boolean unregisterClient(in Sim::ComClient p_ComClient);

    boolean registerEntity  (in ComEntityDescriptor p_ComEntityDescriptor,
in Sim::ComClient p_ComClient);
    boolean unregisterEntity(in ComEntityDescriptor p_ComEntityDescriptor,
in Sim::ComClient p_ComClient);

    stringSequence getClientIDList();
    string getClientID(in ComEntityDescriptor p_ComEntityDescriptor);
    ComClient getClient(in string p_ID);
    ComClient getEntityClient(in ComEntityDescriptor p_ComEntityDescriptor);

    ComEntityDescriptorList getEntityDescriptorList();

    boolean getObjectID(in string p_Name, out IDType p_ID);
    boolean getMulticastAddress(out string p_MulticastAddress);
    double  getTime();

    oneway void setObjectDOF(in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID, in vector3d p_Position, in vector3d p_Rotation);
    oneway void scaleObject (in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID, in vector3d p_Scale);
    oneway void attachObject(in double p_Time, in IDType p_ObjectID, in
string p_AttachToObject, in string p_AttachToLabel);
    oneway void detachObject(in double p_Time, in IDType p_ObjectID);
    oneway void hideObject  (in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID);
    oneway void showObject  (in double p_Time, in IDType p_ObjectID, in
IDType p_ComponentID);
  };
};

------------------------------------ IDL
----------------------------------------




More information about the tao-users mailing list