0

まず、/ usr / share / vala / vapi/libarchive.vapiからのいくつかの定義

[CCode (cprefix="ARCHIVE_", lower_case_cprefix="archive_", cheader_filename = "archive.h")]
namespace Archive {...
[CCode (instance_pos = 1.9, cname="archive_open_callback")]
    public delegate int OpenCallback (Archive archive);
    ...
    [CCode (cname = "struct archive", free_function="archive_write_finish")]
    public class Write : Archive {...
            public Result open (
                    [CCode (delegate_target_pos = 0.9)] OpenCallback ocb,
                    [CCode (delegate_target_pos = 0.9)] WriteCallback rcb,
                    [CCode (delegate_target_pos = 0.9)] CloseCallback ccb
            );
    }
}

それから私のコード

int mOpenCallback (Write archive)
{
    return Result.OK;
}

void foo(){...
Write archive = new Write();
archive.open(mOpenCallback,mWriteCallback,mCloseCallback);
...}

結果:エラー:割り当て:mOpenCallback' toArchive.OpenCallbackから変換できません '

どうしたの ?

代わりにこれを試しました

namespace Archive {
int OpenCallback (Write archive)
{
    return Result.OK;
}
}

void foo(){...
Write archive = new Write();
archive.open(OpenCallback,mWriteCallback,mCloseCallback);
...}

しかし、それは出力します: Archive' already contains a definition forOpenCallback '

void foo(){...
Write archive = new Write();
Archive.OpenCallback t = mOpenCallback;
archive.open(t,mWriteCallback,mCloseCallback);
...}

エラーを出力します:割り当て:foo.mOpenCallback' toArchive.OpenCallbackから変換できません '

4

1 に答える 1

1

mOpenCallbackWritehas は typeではなくtype の引数を取るArchiveため、デリゲートとは異なる型を持ちOpenCallbackます。が期待される場合は、コールバック内で from から write へWriteのキャストを実行する必要があります。Archive

于 2011-11-29T20:34:22.937 に答える