如何创建C++。net.DLL,具有命名空间但没有类
我试图创建一个DLL来包含一组函数,这些函数是我在C++ .NET应用程序中经常使用的。我认为排列这些函数的最佳方式是在名称空间中,因为它们不引用特定的对象如何创建C++。net.DLL,具有命名空间但没有类,dll,c++-cli,Dll,C++ Cli,我试图创建一个DLL来包含一组函数,这些函数是我在C++ .NET应用程序中经常使用的。我认为排列这些函数的最佳方式是在名称空间中,因为它们不引用特定的对象 namespace MyNamespace { int a(); int b(); int c(); } DLL编译正确,但当我尝试在客户端解决方案中使用命名空间时,出现以下错误: error C2871: 'MyNamespace' : a namespace with this name does not ex
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?您不能。在.NET中,没有“免费”函数。一切都是一个类的方法。在您的例子中,静态类的静态方法,但仍然是类的方法。只有
公共引用类中的公共方法才能被其他托管代码看到和使用。您的第一个声明创建了不在此类内的函数。CLR通常不支持这一点,方法必须存在于类内部
< C++ > CLI编译器仍然乐于编译你的代码,毕竟C++中有这样的函数是常见的。但是它必须为函数中的代码找到一个合适的归宿,它会创建一个特殊的类作为归宿。它名为
,在生成的程序集上运行ildasm.exe时可以看到它。此类有一个故意不可用的名称,不能在标识符中使用尖括号。并标记为内部,因此它们在元数据浏览器中也不可见。您仍然可以链接这些函数,换句话说,您可以从其他C++/CLI源代码文件调用它们。但不是来自其他托管语言,它们不使用链接器
因此,使用您找到的解决方法,这是一种公开函数的好方法。您试图使用哪种语言来使用此DLL?C++/CLI也可以?我肯定会将它与C++/CLI一起使用,并希望它也能与visual basic一起使用,在较小程度上与C#一起使用。可以在C++/CLI中编译自由函数,因此它比您所说的更复杂。我相信编译器会将这些函数放在一个隐式创建的类中,该类具有一个无法描述的名称。