cancel
Showing results for 
Search instead for 
Did you mean: 

COM class factory Error (80040154)

Former Member
0 Kudos

Our Windows based (C#, .Net Framework 3.5) console application receives this error when attempting to interface BO XI v12.1.

This issue only occurs when the console app runs on a 64 bit server (Windows 2008 R2).

Error:

Retrieving the COM class factory for component with CLSID {E063B04A-CB8B-460E-99D0-F7D8FA2FAAA2} failed due to the following error: 80040154

The error occurs when trying to use the boSession GetInfoStore object. I have seen similar posts but they relate to an web based app running under IIS.

Any suggestions welcome...

Thanks

Accepted Solutions (1)

Accepted Solutions (1)

Adam_Stone
Active Contributor
0 Kudos

Make sure you have built the application as x86 and not as any cpu. Also, using the Enterprise SDK is not tested or supported for use in anything other than web apps.

Former Member
0 Kudos

Our application is built as x86. After further debugging I find the error is occuring when we are using the BOSession object.

Code used is as follows:

m_boSession = boSession;

// Construct report query

String sQuery = "select * from CI_INFOOBJECTS" +

" where SI_PROGID='CrystalEnterprise.Report'" +

" and SI_ID=" + iReportID;

// query InfoStore and retrieve report

m_ios = m_boSession.GetInfoStore().Query(sQuery);

if (m_ios.Count < 1)

throw new Exception("Either the supplied report id (\"" + iReportID + "\") " +

"does not exist, or the user has no access.");

// store report object

m_report = new Report(m_ios[1].PluginInterface); <<<<<<<Error occur here

The error occurs in the line above due the PluginInterface getting ths error: unable to get si_marked_as_read property value.

We are using the BO XI DSK v3.1.

ted_ueda
Employee
Employee
0 Kudos

Those are two different errors.

The first exception is because the 64-bit process couldn't load the 32-bit COM object behind SessionMgr. The exception would happen when you try to retrieve the SessionMgr factory, i.e., before you even get to the InfoStore step.

The second exception is because it's trying to cast - in the COM sense and not the .NET sense - a generic InfoObject to Report and looking at the PluginInterface is trying to find a specific property that's used to mark objects stored in the Inbox as 'read' by the User.

So you may not be retrieving the object you think you're retrieving. I would run the Enterprise SQL query in Query Builder, and check to ensure it's actually a Report type.

Sincerely,

Ted Ueda

Former Member
0 Kudos

Ted - thanks for the reply.

The report is of a Report type and the process is successful from a 32 bit server. It only fails when the interface is from a 64 bit O/S.

I have the custom application local running in debug mode compiled as x86. And the GetInfoStore query is successful with a m_ios.Count = 1 and there are many details in the Report object that imply that is was successful.

This is the line of code that fails - m_report = new Report(m_ios[1].PluginInterface)

Report defined as CrystalDecisions.Enterprise.Desktop - public Report(PluginInterface existingObject);

When I navigate the m_ios[1] object using the Autos window I find lots of details but these exceptions must be part of the puzzle.

Locked: 'm_ios[1].Locked' threw an exception of type 'System.Runtime.InteropServices.COMException' bool {System.Runtime.InteropServices.COMException}

Adam_Stone
Active Contributor
0 Kudos

How did you install the SDK?

Former Member
0 Kudos

Well from my Win 7 client an Admin did it as we are restricted by App Locker. Instructions below were provided to our Admins.

BO SDK Install Instructions:

1. The BusinessObjects Enterprise XI 3.1 .NET SDK can be installed to a non C: drive by performing a custom install of

BusinessObjects Enterprise XI 3.1.

2. Run the BusinessObjects Enterprise XI 3.1 setup.

3. Select english language and click OK.

4. Click Next.

5. Select I accept the License Agreement, then click Next.

6. Enter Product Keycode "c801y-rmr9y2m-00m300a-bhvx" then click Next.

7. Select your language pack, then click Next.

8. Select Custom or Expand Install then change the drive letter in the Destination Folder field.

9. Click Next.

10. Click the drop down beside BusinessObjects Enterprise in the tree view and select Entire feature will be unavailable.

11. Expand Client Components.

12. Expand Developer Components.

13. Click the drop down beside BusinessObjects Enterprise .NET SDK and select Will be installed on local hard drive.

14. Click Next.

15. Click Next.

16. The .NET SDK will now be installed.

Adam_Stone
Active Contributor
0 Kudos

You will also need to make sure that you Click on Database Access and select "Will be installed on local hard drive"

Missing this option has been known to cause casting issues.

Former Member
0 Kudos

Issue has been resolved by the install of the Database Access component.

Thanks!!!!!!

Answers (0)