【问题标题】:Is there a way to use a VB Dll in c++ (preferably cross-plattform)有没有办法在 c++ 中使用 VB Dll(最好是跨平台)
【发布时间】:2020-02-17 22:17:00
【问题描述】:

我正在尝试使用我自己的代码与硬件进行交互。供应商在他的网站上提供了一个 dll,其中包含一些 C# 示例代码,该 DLL 似乎是从 Visual Basic 编译的。 我想知道如何在 C++ 中使用这个 DLL。 C++/CLI 是唯一的方法吗?还是有其他方法可以让我的代码保持跨平台兼容?

【问题讨论】:

  • COM 是一种方式 - 它是 .net dll 还是 vb 经典 dll?
  • 请跨平台展开。绝大多数平台都无法运行 VB DLL,因此最好了解您的目标平台是什么,这样我们就可以通过消除不可能实现的目标来清除唾手可得的果实。
  • DLL 仅适用于 Windows,C# / CLI 的情况几乎相同。 Linux 使用 .so 文件作为共享库。
  • 根据经验,VB 中的 Visual 仅指 MS/Win。

标签: c# c++ visual-studio dll


【解决方案1】:

简单示例:假设我们在 .NET 程序集 (hello.dll) 中有一个托管类 Hello。

    //This is c# but it could be also vb. Compilator of c# and VB.net  translate it to same thing .Net assembly dll. Which is internaly exactly the same  as c# dll.
    class Hello
    {
        public void HelloWorld()
        {
            Console.Writeline("Hello World!");
        }
    }

现在我们需要为 Hello 定义一个原生代理类:

class Hello
{
public:
    Hello() : wrapper_("hello.dll", "namespace name") {}
    void HelloWorld()
    {
        wrapper_("Hello");
    }
private:
    nativeAdapter::NativeProxy wrapper_;
};
}

在我们的 main 函数中,我们可以像使用托管类一样使用代理:

int main(int, char **)
{
    Namespace::Hello hello;
    hello.Hello();
    return 0;
}

【讨论】:

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