The case of the missing entry point


In this case, a Softimage user running Composite 2013 was getting the following error when he started Composite:

---------------------------
composite.exe - Entry Point Not Found
---------------------------
The procedure entry point 
?Initialize@CMLFacade@@SAXPEAVCMLWaypoint@@PEB_W11HI_J2_N1@Z 
could not be located in the dynamic link library MC3.dll. 
---------------------------
OK   
---------------------------

The short story is that 3ds Max 2010 was causing this problem with Composite 2013. Here’s the long story…

A “procedure entry point” is basically a function (or method) defined in the DLL. In this case, Composite is trying to call a certain Initialize function in MC3.dll, but that Initialize function isn’t there.

More specifically, Composite is trying to call the Initialize member function of a CMLFacade object. All the other stuff (@@SAXPEAVCMLWaypoint@@PEB_W11HI_J2_N1@Z) that you see in the error message is part of the decorated name generated by the C++ compiler. Different versions of a DLL will have different decorated names for entry points, so it’s reasonable to assume that this error probably means that Composite is loading the wrong version of MC3.dll.

Using Dependency Walker, I verified that the MC3.DLL that ships with Composite 2013 does not include the entry point specified in the error message. You can see that the 2013 version of MC3.dll has a different entry point name for Initialize:

However, I got a Process Monitor log from the customer, and it showed that Composite 2013 was loading right version of MC3.dll.

So, right DLL but wrong entry point. Using Dependency Walker again on older versions of MC3.dll, I found that the Composite was looking for an entry point that was in an older version of MC3.dll. But why???

I spent an hour or two looking over the Process Monitor logs, but everything looked normal…except for one thing: Composite 2013 was loading lots of 3ds Max 2010 files. So I renamed the 3ds Max install folder (so Composite wouldn’t find it) and the entry point error went away. My guess is that one of those older Max DLLs was bringing in a reference to the old MC3 entry point, and that was what was causing the problem in Composite.

Renaming the 3ds Max 2010 install folder just to run Composite is pretty hacky, so I tried to find another way. The best I came up with was this:

  1. In the registry editor, find the key HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\UPI
  2. Under that key, there is a value for 3ds Max 2010. This value holds the install path for 3ds Max 2010. Edit the value and change it, for example, like this:
     
    Value Name: C:\Program Files\Autodesk\3ds Max 2010\UPI\upiconfig.xml
    Value Data: C:\Program Files\Autodesk\3ds Max 2010xxx\UPI\UPI.dll
    

After I did that, I didn’t get the entry point error in Composite, and 3ds Max 2010 still ran ok (well, it started ok, I didn’t really exercise Max after that).

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s