Undefined Externals, TrackPopupMenu and VarBstrCmp

I have a large CE workspace that I migrated from CE 4.0 to CE 5.0 using the built in conversion tool in VS 2005.  When I try to compile any of the COM dll's I get the following series of linking messages:

1>UniversalDataForms.obj : error LNK2019: unresolved external symbol VarBstrCmp referenced in function "public: bool __cdecl ATL::CComBSTR::operator==(class ATL::CComBSTR const &)const " ( 8CComBSTR@ATL@@QBA_NABV01@@Z)

1>UniversalDataForms.obj : error LNK2019: unresolved external symbol TrackPopupMenu referenced in function "public: virtual long __cdecl CUniversalDataForms::SelectAndShowInputForm(long,long,short *)" ( SelectAndShowInputForm@CUniversalDataForms@@UAAJJJPAF@Z)

1>ARMV4Debug/SDTUniversalDataForms.dll : fatal error LNK1120: 2 unresolved externals

The documentation has not been any help in trying to determine which lib's to include in the project.  Can you tell me which libraries I need to add to the Link input list

This code is being built for the PPC 2003 SDK.

Alicia



Answer this question

Undefined Externals, TrackPopupMenu and VarBstrCmp

  • Victor_Acosta

    I just took a closer look at this and it seems that PPC2003 doesn't implement TrackPopupMenu. There are two functions that this might have been aliased to: SHTrackPopupMenu defined in aygshell.lib, and TrackPopupMenuEx, which despite what the docs say, is in coredll.lib. This should be a very simple code change. Hope this helps,

    Jeff Abraham
    Visual Studio


  • Monique555

    I included the atlosapi.lib in the link input as suggested but when I try and register the component it fails probably because the atlosapi.dll does not exist.

    I have not found atlosapi.dll anywhere on my PC or CE device.

    I am trying to do a PPC2003 build using VS 2005 and test it on a CE 4.0 PPC 2003 device.  Should this be possible or am I trying to do the impossible  

  • Entity_X

    Hi Alicia,



    Atlosapis.lib is a static library; it doesn't have an associated dll. I would start out by running depends.exe on the dll output of the project, and checking to ensure that all of your dependencies are present on the device (depends gets confused as to what "ATL80.dll" is getting pulled in, so don't trust imports that don't come out of your dll (i.e. don't look from MyFoo.dll to ATL.dll to kernel32.dll and assume that the missing dependency is kernel32.dll). It's possible that ATL and MFC aren't on the device, as they might not be added to a migrated project's additional deployment files list. If all the dependencies are present, I would start debugging this by creating an executable project that has a main method that simply attempts to call LoadLibrary with the path to your dll, and setting a breakpoint in the LoadLibrary method of the dll. Step through that code, and if it works, then start debugging the DllRegisterServer method. Hope this helps,



    Jeff Abraham

    Visual Studio

  • GlenAtMotorola

    Hi Alicia,

    You need to link against atlosapis.lib (VarBstrCmp) and menu.lib (TrackPopupMenu). atlosapis.lib is new for VS2005 and includes functions that the ATL runtime expects to be present but which don't exist in the OS. It should be present in newly created projects, but it seems like there's a bug in the project migration wizard. Thanks,

    Jeff Abraham
    Visual Studio

  • Sean Lively

    I will give atlosapis.lib a try.

    I have not been able to find menu.lib anywhere on my system.

    Alicia


  • Undefined Externals, TrackPopupMenu and VarBstrCmp