能够创建一个使用构建器加载其内容的新窗口小部件是理想的,例如.
public class MyDialog : Dialog
{
public MyDialog
{
Gtk.Builder builder = new Gtk.Builder ();
builder.add_from_file ("dialog.ui");
this = builder.get_object ("my_dialog") as Gtk.Widget;
}
}
Run Code Online (Sandbox Code Playgroud)
显然这不会起作用,因为它this =是一个无效的赋值,但我想知道是否有办法使用从构建器加载的那些来设置窗口小部件的内容.
对于与此同时,我把它换成了this = ...与
var content = get_content_area ();
var dialog = builder.get_object ("my_dialog") as Gtk.Widget;
var _content = (dialog as Dialog).get_content_area ();
_content.reparent (content);
Run Code Online (Sandbox Code Playgroud)
哪个确实有效,但是我能够直接加载它仍然有意义.
谢谢.
我有以下C代码使用libmodbus使用ModbusTCP读取单个设备寄存器:
modbus_t *ctx;
uint16_t tab_reg[16];
ctx = modbus_new_tcp("10.0.1.77", 502);
modbus_read_registers(ctx, 0x20, 2, tab_reg);
printf("reg = %d (0x%X)\n", tab_reg[0], tab_reg[0]);
printf("reg = %d (0x%X)\n", tab_reg[1], tab_reg[1]);
Run Code Online (Sandbox Code Playgroud)
现在尝试使用我生成的Vapi将其切换到Vala,new和read的内容是:
[CCode (cheader_filename = "modbus.h", cname = "modbus_new_tcp")]
public static unowned Modbus.modbus_t create_tcp (string ip_address, int port);
public static int read_registers (Modbus.modbus_t ctx, int addr, int nb, uint16 dest);
[CCode (cheader_filename = "modbus.h")]
Run Code Online (Sandbox Code Playgroud)
翻译的Vala程序是:
class ModbusReadTest : GLib.Object {
unowned Modbus.modbus_t ctx;
public void run () {
uint16 reg = 0x00;
ctx = create_tcp ("10.0.1.77", …Run Code Online (Sandbox Code Playgroud)