1

ここに素晴らしいwafvalaの例があります:

https://code.launchpad.net/~asabil/vala/vala-project-template.waf

そしてそれはvalaのライブラリとアプリケーションを示しています。残念ながら、この例のプログラムは実際にはライブラリ(メソッド「hello」を定義する)を使用していません。プログラムから呼び出そうとすると、コンパイルエラーが発生します。

ライブラリを正しくロードするようにwscriptを変更できません。ここでのトリックは何ですか?ありがとう。

私が追加したのは、プログラムの次の行です。

My.Lib.hello();

しかし、それはコンパイルされません:

Waf: Entering directory `/home/lzap/work/shellmail/TEST/vala-template/_build_'
[1/6] valac: src/hello-gtk.vala -> _build_/default/src/hello-gtk.c
../src/hello-gtk.vala:16.9-16.10: error: The name `My' does not exist in the context of `Sample.create_widgets._lambda0_'
Waf: Leaving directory `/home/lzap/work/shellmail/TEST/vala-template/_build_'
Build failed:  -> task failed (err #1): 
    {task: valac_task hello-gtk.vala -> hello-gtk.c}

私はプログラムwscriptを変更する必要があると思います:

#!/usr/bin/env python
def build(bld):
    prog = bld(features='cc cprogram')
    # symbolic name used to reference this object
    prog.name = 'hello-gtk.program'
    # name of the resulting program
    prog.target = 'hello-gtk'
    prog.source = 'hello-gtk.vala'
    # libraries to link against
    prog.uselib = 'GTK+'
    # Vala packages to use
    prog.packages = 'gtk+-2.0'
    # Extra vapi dirs
    #prog.vapi_dirs = '../my_lib'
    # Enable threading
    #prog.threading = True
4

1 に答える 1

1

このhelloメソッドは静的メソッドではなくインスタンスメソッドであるため、My.Lib最初にインスタンスを作成してからメソッドを呼び出す必要があります。

var obj = new My.Lib();
obj.hello();

それでも失敗する場合はusing My;、hello-gtk.valaを追加してみてください。

于 2012-03-07T04:05:19.957 に答える