【问题标题】:Can`t Load C++/CLI DLL resources无法加载 C++/CLI DLL 资源
【发布时间】:2013-02-26 10:54:53
【问题描述】:

我只是想查看资源名称,但没有出现任何内容。

我在 Visual Studio 2010 中制作并编译了一个 C++/CLI(托管)DLL,并添加了一些资源文件作为测试(一个图标和一个位图)。我检查了 PE Explorer,资源肯定在那里。

我的简单代码:

Assembly asm = Assembly.LoadFrom("C:\\test.dll");
String[] res = asm.GetManifestResourceNames();

我知道 DLL 已加载,因为当我调试时,我可以看到“asm”变量中的所有信息。我也可以从 DLL 导入数据(使用 MEF)。

因此,DLL 具有资源,并且代码肯定正在加载程序集。但是为什么我的 'res' 变量总是返回空字符串列表呢?

编辑: 我创建了一个 C# 类库 (.dll),其中包含仅用于测试的资源。现在它起作用了!但仍然在我的 C++/CLI DLL 中没有出现资源。不知何故,它们在 DLL 中,但代码无法访问它(仅在 C++ DLL 中)。也许它与托管/非托管代码有关,但由于我是用 CLR 编译它,所以情况似乎并非如此。有什么建议吗?

解决方案 我懂了!以防万一有人需要。

根据这些主题:

在 C++/CLI 项目中嵌入资源

http://bytes.com/topic/net/answers/571530-loading-markup-xamlreader-load-resource-file#post2240705

问题正是 C++/CLI 的问题。您必须在项目属性的链接器选项卡下的输入项中添加它。现在它似乎工作正常。谢谢

【问题讨论】:

    标签: resources


    【解决方案1】:

    我有一个类似的问题,你的问题可以帮助我解决它。 我的项目平台是 C++/CLI,我的 DLL 平台是 c#。

    我想将DLL打包到我的执行文件中,因此我们首先应该通过以下步骤将DLL放入项目资源文件中:

    1.复制项目路径中的DLL。

    2.将DLL名称(例如test.dll)放在下面的地方 属性->链接器->输入->嵌入式托管资源文件

    那么我们应该阅读和使用嵌入式DLL:

    Stream^ stream = Assembly::GetExecutingAssembly()->GetManifestResourceStream("test.dll");
    
    array<unsigned char>^ dllRawBuffer = gcnew array<unsigned char>(stream->Length);
    
    int res = stream->Read(dllRawBuffer, 0, stream->Length);
    stream->Close();
    
    Assembly^ dllAssembly = Assembly::Load(dllRawBuffer);
    
    System::Type^ testclass = dllAssembly->GetType("TestNamespace.TestClass");
    
    MethodInfo^ TestMethod = testclass->GetMethod("TestMethodName");
    
    // Create an instance.
    Object^ Testobj = Activator::CreateInstance(testclass);
    
    
    // Execute the method.
    
    array<Object^>^ params = gcnew array<Object^>(2);
    params[0] = 2;
    params[1] = 3;
    
    Object^ result = TestMethod->Invoke(Testobj, params);
    

    显然,此解决方案仅适用于托管 DLL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多