我有一个旧的本机MFC / c ++ dll我已经设法用/ CLR标志编译它。 现在我在namaspace中向dll添加了一个托管C ++ / CLI类。
头文件位于下方,cpp文件只有头文件的#include。 本机dll是一个包含大量非托管代码的巨大dll项目,但它只有一个托管c ++类,如下所示。
当我添加该dll作为.net winforms项目的引用时,我在对象浏览器中看不到该命名空间/类
我因为没有找到命名空间“ShashiTest”而得到编译错误
我正在使用Visual Studio 2008。
混合模式下的原生dll无法作为对托管项目的引用添加?
或者我错过了什么
请帮忙。
#pragma once
#using<mscorlib.dll>
#using<system.windows.forms.dll>
// Class derived from Forms
using namespace System::Windows::Forms;
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Diagnostics;
using namespace System::Windows::Forms;
namespace ShashiTest {
/// <summary>
/// Summary for test
/// </summary>
public ref class test
{
public:
test(void)
{
};
void ShowMessage()
{
MessageBox::Show("Hello World");
}
};
}
当我简化我的问题时......我创建了一个新的MFC dll并为其添加了一个manged C ++类(与上面相同的类)。用/ CLR标志编译。
当我将此dll添加到winforms项目并运行它时,我得到了
System.BadImageFormatException。任何线索?
但是我看到类和名称空间和winform项目编译得很好,不像我上面的问题。
答案 0 :(得分:1)
System.BadImageFormatException
通常是由AnyCPU
.NET应用程序引用包含32位本机代码的DLL引起的。在64位平台上运行时出现错误,因为AnyCPU
应用程序以64位运行,无法加载DLL。对此的修复是(简单)将应用程序标记为仅x86或(硬)以提供包含本机代码的所有DLL的32位和64位版本。
当然,你可能还有其他一些问题。按照@cdleonard在评论中的建议,使用Red Gate Reflector检查DLL是一个很好的下一步。或ILSpy,这是免费的。