C# - 无法访问 C++/CLI .dll 中包含的方法
C# - Unable to Access Methods Included in C++/CLI .dll
我尝试将两个 C++/CLI DLL 与 C# 一起使用。我正在使用 VS10 并确保 DLL 已正确包含在 "References" 文件夹中。
因此,第一个 DLL 运行良好。它包含 classes,因此 C# 应用程序可以通过以下方式访问 classes 中的函数:1) 创建在 DLL 中找到的 class 的实例,然后 2) 调用函数 "normally."(例如 instanceOfClass.method1();
)。
第二个 DLL 不起作用。 在第二个 DLL 中,所有函数都在全局范围内。没有名称空间范围或 classes。我 运行 遇到了这里的问题,因为当我尝试在 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();
}
}
}
我发现的关于此问题的所有其他问题都与具有 classes 的 C++ DLL 有关。 我的问题是:是否可以在 DLL 中引用 不 属于 class 的方法?
如果可以的话,我做错了什么?我怀疑我可能在我的 C# 应用程序中限制了名称空间(或某些范围),不允许它看到 DLL
的内容
如果不可能,为什么 C# 不能不使用 "class-less" DLL?有没有办法解决这个问题,或者有其他方法避免在库中使用 classes(为了最容易访问)?
If it is not possible, why can't C# not use "class-less" DLLs?
由于 CLR 不支持,方法必须始终是 class 的成员。这是与 C++ 对自由函数的支持的阻抗不匹配。 C++/CLI 编译器通过将它们移动到 class 来解决它。它的名字是 <Module>
并且在程序集之外是不可访问的。就像 C# 中的 internal class 一样。实际上也使功能无法访问。
解决它很简单,将它们添加到 ref class。您可以声明它们 static.
我尝试将两个 C++/CLI DLL 与 C# 一起使用。我正在使用 VS10 并确保 DLL 已正确包含在 "References" 文件夹中。
因此,第一个 DLL 运行良好。它包含 classes,因此 C# 应用程序可以通过以下方式访问 classes 中的函数:1) 创建在 DLL 中找到的 class 的实例,然后 2) 调用函数 "normally."(例如 instanceOfClass.method1();
)。
第二个 DLL 不起作用。 在第二个 DLL 中,所有函数都在全局范围内。没有名称空间范围或 classes。我 运行 遇到了这里的问题,因为当我尝试在 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();
}
}
}
我发现的关于此问题的所有其他问题都与具有 classes 的 C++ DLL 有关。 我的问题是:是否可以在 DLL 中引用 不 属于 class 的方法?
如果可以的话,我做错了什么?我怀疑我可能在我的 C# 应用程序中限制了名称空间(或某些范围),不允许它看到 DLL
的内容
如果不可能,为什么 C# 不能不使用 "class-less" DLL?有没有办法解决这个问题,或者有其他方法避免在库中使用 classes(为了最容易访问)?
If it is not possible, why can't C# not use "class-less" DLLs?
由于 CLR 不支持,方法必须始终是 class 的成员。这是与 C++ 对自由函数的支持的阻抗不匹配。 C++/CLI 编译器通过将它们移动到 class 来解决它。它的名字是 <Module>
并且在程序集之外是不可访问的。就像 C# 中的 internal class 一样。实际上也使功能无法访问。
解决它很简单,将它们添加到 ref class。您可以声明它们 static.