1

私はDllImportの処理に不慣れなので、誰かが私の小さな問題を解決できれば幸いです。クラス内にメソッドを持つdllをインポートしたい。メソッドはstringarrayを返す必要があります。

だからここにいくつかのコードがあります:

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]は使用しないでください。[DllImport]は、アンマネージdllでのみ使用する必要があります(ここでの違いを参照してください)。

これからは、「dll」と言うたびに「マネージドdll」を意味します

アプリケーションをdllを使用してコンパイルする場合(実行中に「手動で」ロードするのではなく、必要ないと思います...)、次の参照を追加できます。

  • コンパイルされたdllファイル( ".NETリファレンス");
  • .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 に答える