【问题标题】:Using a C++CLI .dll as an assembly in Powershell在 Powershell 中使用 C++CLI .dll 作为程序集
【发布时间】:2016-10-25 02:23:34
【问题描述】:

我想使用 C++CLI(托管 C++).dll 在 Powershell v3 x86 和(非托管)C++ 应用程序之间进行接口。

我尝试在 powershell 中同时使用 Add-Type[System.Reflection.Assembly]::LoadWithPartialName() 加载用 C++CLI 编写的非常简单的“Hello World”程序,但出现错误:“无法加载文件或程序集”

然后,我为 C++CLI 类编写了一个 C# 包装器,并使用相同的方法成功地将其加载到 Powershell 中,但是当我进行引用 C++CLI 代码的调用时,我得到了相同的错误。 C# 代码本身似乎对 C++CLI .dll 的调用没有任何问题,但 Powershell 可以。

Accessor.h:

using namespace System;

namespace Accessor {

    static public ref class Greeting
    {
  public:
    static void HelloWorld();
    };
}

Accessor.cpp:

#include "Accessor.h"

void Accessor::Greeting::HelloWorld()
{
  Console::WriteLine("Hello World!\n");
}

包装器.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Accessor;

namespace AccessWrap
{
    static public class Wrapper
    {
      static public void HelloWorld()
      {
        Greeting.HelloWorld();
      }
    }
}

实现此目的的正确方法是什么?我尝试了许多其他我在网上找到的方法,但没有一个对我有用。

编辑: 这是我尝试直接加载 C++CLI .dll 时遇到的确切错误: http://imgur.com/HF5VRkf

【问题讨论】:

  • 会不会与您正在测试的机器上不可用的 C++ 运行时有关?
  • 您得到的确切错误是什么?该消息听起来像FileLoadException,通常包含有关为什么程序集无法加载的详细信息。
  • 我用错误信息图片的链接编辑了我的帖子,文件路径中省略了我的名字。
  • 请不要发布与图形无关的问题的屏幕截图,请花时间在问题中输入内容。
  • “已尝试...”是COR_E_BADIMAGEFORMAT,通常(但不总是)表示 32 位进程正在尝试加载 64 位 DLL,反之亦然。你必须先investigate that possibility

标签: c# .net powershell dll c++-cli


【解决方案1】:

我不小心使用了 64 位 powershell,而不是我想的 x86。我切换到 x86,它工作正常。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多