【问题标题】:Can a DLL project of VS use/return CLR types?VS 的 DLL 项目可以使用/返回 CLR 类型吗?
【发布时间】:2011-09-06 17:01:07
【问题描述】:

我正在尝试编写一个 DLL,它可以做很多事情,包括文件 I/O、字符串拆分、处理、输出大量信息。我正在使用 VS2008、.net 3.5、C++

我关注了这篇文章

http://msdn.microsoft.com/en-us/library/ms235636.aspx

首先,我在解决方案中构建了一个调用者(测试者)项目,并尝试在 dll 中调用一个测试函数,这样就可以了。所以我继续在 DLL 中打开 CLR 编译标志,以便我可以更轻松地进行字符串处理。但这给了我一个链接错误。我尝试在调用者项目中打开 CLR 编译标志,突然我有两个链接错误。

我必须做些什么才能在 DLL 中使用 CLR 并能够将结果作为对象返回给调用者?

【问题讨论】:

  • 你的DLL的调用者是否也被管理了?
  • @Martyn Lovell 是的。现在调用者也是 Visual C++。它与 DLL 在同一个解决方案中。

标签: .net visual-studio visual-studio-2008 visual-c++ dll


【解决方案1】:

是的,您可以在 DLL 边界通过平面 API 传递 CLR 类型。但只有其他基于 C++ 的 /clr 代码才能使用它们。而且因为一个进程只有一个 IAT,如果您有多个应用程序域,这将不会总是正常工作。

推荐的传递托管类型的方法是通过直接托管引用。

马丁

【讨论】:

    【解决方案2】:

    把你的函数放在一个

    public ref struct
    

    然后将托管类型用于参数和返回值变得非常简单。

    如果您想在不先创建对象的情况下调用函数,请将它们设为静态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多