2013-01-02 149 views
0

我已經提到了c#類庫項目中的64位com interop dll,並且有代碼來初始化它,這個庫在asp.net項目中使用。在c#項目中初始化64位Com C++ dll

由於業務層項目和asp.net是在C#我已配置爲任何CPU平臺。我也設置了

現在,當我嘗試初始化我的業務層項目中的com類時,我得到了以下錯誤。任何建議什麼這個錯誤,爲什麼它提到無效的Win32應用程序,因爲我已經把它覆蓋到64位。

從IClassFactory創建CLSID爲{31DE5D69-1F5F-434D-8855-F627EAEB2404}的COM組件實例失敗,原因如下:800700c1不是有效的Win32應用程序。 (來自HRESULT的異常:0x800700C1)。

由於

回答

0

我不得不在Visual Studio 2012的64位命令提示符下注冊dll,它將dll正確註冊爲64位,我可以在c#項目中使用它。

1

不可能從86流程64引用COM庫。如果將配置設置爲「任何CPU」,則字符長度get會在應用程序初始化期間終止,這意味着如果在x86系統上啓動應用程序將導致使用不能引用x64庫的x86配置。

您需要創建一個x64庫,才能使用基於x64的COM服務器。在您的IIS配置中,應用程序池也需要使用x64。但是,您應該避免在項目中使用「任何CPU」,請參閱this article

+0

我將我的應用程序轉換爲僅在64位機器上工作,但我不得不使用「任何CPU」來構建c#項目,因爲asp.net沒有選擇平臺作爲x64的選項,位dll參考.i也使用應用程序池設置啓用32位應用程序屬性爲設置爲false。 – Arvind