我正在尝试创建一个DLL来包含我在C ++ .net应用程序中定期使用的一组函数。我认为安排这些函数的最佳方法是在命名空间中,因为它们不引用特定的对象。
namespace MyNamespace
{
int a();
int b();
int c();
}
DLL正确编译,但是当我尝试在客户端解决方案中使用命名空间时,我得到以下错误:
error C2871: 'MyNamespace' : a namespace with this name does not exist
但是,如果我将函数作为静态方法包装在一个类中,我的客户端解决方案将按预期编译并运行:
namespace MyNamespace
{
public ref class MyClass
{
public:
static int a();
static int b();
static int c();
}
}
我的意思是ref关键字正在对类做一些事情以将其公开给客户端应用程序。 如何使用命名空间而不是类创建托管/ CRL / CLI / .net .DLL?
答案 0 :(得分:1)
public ref class
中只有公共方法可供其他托管代码查看和使用。您的第一个声明创建的函数不在此类中。这通常不受CLR支持,必须存在于类中。
C ++ / CLI编译器仍然很乐意编译您的代码,毕竟在C ++代码中通常有这样的函数。但它必须为函数中的代码找到合适的主页,它创建了一个特殊的类来作为主页。它名为<Module>
,您可以在生成的程序集上运行ildasm.exe时看到它。此类有一个故意无法使用的名称,不能在标识符中使用尖括号。并标记为 internal ,因此它们在元数据浏览器中也不可见。您仍然可以链接这些函数,换句话说,您可以从其他C ++ / CLI源代码文件中调用它们。但不是来自其他托管语言,他们不使用链接器。
因此,使用您找到的解决方法,这是公开函数的好方法。
答案 1 :(得分:0)
你做不到。在.NET中,没有“免费”功能。一切都是一种阶级的方法。在您的情况下,静态类的静态方法,但仍然是类的方法。