1

我对处理 DllImport 的东西没有经验,所以如果你们中的任何人都可以解决我的小问题,我会很高兴。我想导入一个在类中有一个方法的 dll。该方法应返回一个字符串数组。

所以这里有一些代码:

Form1.cs(调用位置):

...
 public partial class Form1 : Form
    {
        [DllImport("lang.dll")]
        public static extern string[] getValues();
        //                   |
        //error occures here v
        string[] labels = getValues();
        Status prgmStatus;

        public Form1()
        {
...

language.cs(我的 .dll 文件的类):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lang
{
    public class language
    {
        public language()
        {
        }

        public string[] getValues()
        {
            string[] content = 
            {
                "User",
                "Password",
                "Login",
                "Create new account ->",
                "Repeat password",
                "E-Mail adress",
                "Register",
                "<- Back to Login"
            };
            return content;
        }
    }
}

因此,当我启动我的程序时,它会调用 dll 的方法,然后出现:

(图片在这里找到:

如何避免此错误并正确获取数组?

感谢您的回答和解决方案, Paedow

更新:

应该可以从此路径加载任何其他 .dll 文件,具有相同的结构但其他内容。该 dll 包含英文版 windows 窗体的标签。当有人想用他自己的语言编写这个程序时,他必须用他的标签编译一个 dll,然后替换这个 dll。

另一个更新: dll 文件不是在同一个解决方案中构建的。dll是自己的解决方案,我的程序中只会用到最终的.dll文件,所以没有参考。

4

2 回答 2

1

当您使用托管 dll 时,您不应该使用 [DllImport],它只能用于非托管 dll(请参见此处的区别)。

从现在开始,每次我提到“dll”时,我的意思是“托管 dll”

如果您想使用 dll 编译您的应用程序(而不是在执行期间“手动”加载它,我猜您不希望...)您可以添加对以下内容的引用:

  • 编译后的dll文件(“.NET Reference”);
  • .dll 项目(“项目参考”),仅当 .dll 项目和 .exe 项目位于同一解决方案中时。

请参阅此处的官方文档。有关解决方案/项目的更多信息,您可以从这里开始

于 2012-09-05T23:04:13.117 回答
0

您不必像@Simon Whitehead 所说的那样使用 DllImport 托管程序集。只需在您的项目中引用它,然后

var l = new lang.language();
string[] labels = l.getValues();
于 2012-09-05T22:56:24.943 回答