2013-01-02 105 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