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

时间:2015-06-24 20:26:51

标签: 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#应用​​程序中的命名空间(或某些范围),它不允许它看到DLL的内容

  • 如果不可能,为什么C#不能使用" class-less" DLL文件?有没有办法绕过这个,或者另一种方法来避免在库中使用类(为了最简单的可访问性)?

1 个答案:

答案 0 :(得分:1)

  

如果不可能,为什么C#不能使用“无类”DLL?

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

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