C# - 无法访问 C++/CLI .dll 中包含的方法

标签 c# c++ function dll global

我有两个 C++/CLI DLL,我正尝试将它们与 C# 一起使用。我正在使用 VS10 并确保 DLL 已正确包含在“引用”文件夹中。

因此,第一个 DLL 运行良好。它包含类,因此 C# 应用程序可以通过 1) 创建在 DLL 中找到的类的实例,然后 2) “正常”调用函数来访问类中的函数。 (例如 instanceOfClass.method1();)。

第二个 DLL 不起作用。 在第二个 DLL 中,所有函数都在全局范围内。没有命名空间范围或类。我在这里遇到了问题,因为当我尝试访问 C# 应用程序中的其中一个函数时,我收到一个错误:The name 'fxn' does not exist in the current context. 我试过了以下所有可能的函数寻址方式:

namespace myDLL {           // Tried with and without namespace declaration
    class Program {
        static void Main(string[] args) {
            fxnInitialize();
            myDLL.fxnInitialize();
            myDLL->fxnInitialize();    
        }
    }
}

我发现的关于此问题的所有其他问题都与带有类的 C++ DLL 有关。 我的问题是:是否可以引用 DLL 中属于某个类的方法?

  • 如果可能的话,我做错了什么?我怀疑我可能限制了我的 C# 应用程序中的 namespace (或某些范围),不允许它看到 DLL 的内容

  • 如果不可能,为什么 C# 不能使用“无类”DLL?有没有办法解决这个问题,或者有其他方法避免使用库中的类(为了最容易访问)?

最佳答案

If it is not possible, why can't C# not use "class-less" DLLs?

因为 CLR 不支持,所以方法必须始终是类的成员。这是与 C++ 对自由函数的支持的阻抗不匹配。 C++/CLI 编译器通过将它们移动到一个类中来解决它。它的名字是<Module>并且它在程序集之外是不可访问的。就像 C# 中的内部类。实际上也使功能无法访问。

解决它很简单,将它们添加到 ref 类中。您可以将它们声明为静态

关于C# - 无法访问 C++/CLI .dll 中包含的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036353/

相关文章:

javascript - 仅当元素未获得焦点时才执行函数

Python 返回值?

c# - 如何在网页上搜索一些文字?

c# - 制作 View 模型错误

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?

c++ - 二叉树节点成员分配的运行时错误

c++ - SDL2/Qt C++ 未读取操纵杆输入但已识别

javascript - 函数体是如何传递给函数中的 return 语句的

c# installer 应用程序 everyone

c# - 在 GridView 中操作当前编辑的行