gpt4 book ai didi

c++ - 使用包含托管类的/CLR 标志构建的 native dll

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:49 25 4
gpt4 key购买 nike

我有一个旧的 native MFC/c++ dll,我设法用/CLR 标志编译它。现在,我已将托管 C++/CLI 类添加到 namaspace 中的 dll。

下面是头文件,cpp文件只有头文件的#include。 native dll 是一个巨大的 dll 项目,其中包含许多非托管代码,但它只有一个如下所示的托管 C++ 类。

当我将该 dll 添加为对 .net winforms 项目的引用时,我在对象浏览器中看不到该 namespace /类,

并且由于找不到命名空间“ShashiTest”而出现编译错误

我正在使用 Visual Studio 2008。

混合模式下的 native 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 并向它添加了一个受管理的 C++ 类(与上面的类相同)。使用/CLR 标志编译。

当我将此 dll 添加到 winforms 项目并运行它时,我得到了

System.BadImageFormatException。有什么线索吗?

但是我看到类和 namespace 以及 winform 项目编译正常,这与我遇到的问题不同。

最佳答案

System.BadImageFormatException 通常是由 AnyCPU .NET 应用程序引用包含 32 位 native 代码的 DLL 引起的。在 64 位平台上运行时出现错误,因为 AnyCPU 应用程序以 64 位运行,无法加载 DLL。解决此问题的方法是(简单)将应用程序标记为仅限 x86 或(困难)提供包含 native 代码的所有 DLL 的 32 位和 64 位版本。

当然,您可能还有其他问题。按照@cdleonard 在评论中的建议,使用 Red Gate Reflector 检查您的 DLL 是下一步的好方法。或者 ILSpy ,这是免费的。

关于c++ - 使用包含托管类的/CLR 标志构建的 native dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com