`
cloverprince
  • 浏览: 127252 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
Now I am going to create a classed type. Q: What is a class? A: I don't know for sure.  In object-oriented programming, a class represents a "kind" of data.  It specifies what data there is (the members/fields) in each object (instance) and what can be done (the methods) to the object. Q: ...
GObject system handles "types". Q: So what is a "type"? A: Err..  A "type" is how you consider a piece of data. See, there is no "type" in assembly language.  The data, whether in registers or memory, are what they are treated as.  You can always read/write d ...
This document introduces the GObject library.  This cannot replace the official tutorial/reference.  It is recommended to lookup the official reference every time you encountered new concepts. -- After trying to learn GObject object system for more than ten times (and failed as many times as I have ...
问题贴:http://cloverprince.iteye.com/blog/481307 引用1. 现有一个主程序用C语言写成。现在要允许第三方开发人员编写扩展的模块,约定第三方开发的模块必须提供一系列已知名称的函数(如 foo(),bar(),baz())。如果要求第三方的模块必须与主程序的二进制代码分开发布,把dll或so丢在某个文件夹内即可被动态装载并使用,应如何实现? 回答: 除了用操作系统提供的接口外,还可以用Glib的简单封装。GLib简单封装了操作系统相关的动态库装载函数,位于GModule中。GModule相当于Library Handle,而g_module_op ...
问题贴:http://cloverprince.iteye.com/blog/481307 引用 2. 现有一个主程序用C++语言写成。现在要允许第三方开发人员编写扩展的类,约定第三方开发的类必须包含一个继承自某个已知类(如class FooPlugin)的子类,名称不限。如果要求第三方的类必须与主程序的二进制代码分开发布,把dll或so丢在某个文件夹内即可被动态装载使用,应如何实现? 回答: 除了直接使用操作系统提供的接口以外,还可以使用Qt提供的插件系统。我们需要一个纯虚类,并用Q_DECLARE_INTERFACE宏声明该接口。插件模块中,具体类继承该接口,并用Q_EXPORT_ ...
问题原贴: http://cloverprince.iteye.com/admin/blogs/481307 引用5. 现有一个主程序用Python语言写成。现在要允许第三方开发人员编写扩展的类,约定第三方开发的类必须包含一个继承自某个已知类(如class FooPlugin)的子类,名称不限。如果要求第三方的类必须与主程序的py脚本或pyc字节码分开发布,把py或pyc丢在某个文件夹内即可被动态装载使用,应如何实现? 回答: Python的imp模块提供了加载模块的方法。一旦加载了模块,其中的函数、类,就可以直接用成员运算符“.”访问。 适用范围: Python2.x 实现 ...
问题原贴: http://cloverprince.iteye.com/admin/blogs/481307 引用4. 现有一个主程序用C#语言写成。现在要允许第三方开发人员编写扩展的类,约定第三方开发的类必须包含一个实现了某个已知接口(如interface IFooPlugin)的类,名称不限。如果要求第三方的类必须与主程序的二进制代码分开发布,把dll丢在某个文件夹内即可被动态装载使用,应如何实现? 回答: 每个插件作为一个程序集(Assembly),dll的形式。里面包含一个实现已知接口的类。使用Assembly.LoadFile()装载该插件,用Assembly.GetInte ...
问题原贴: http://cloverprince.iteye.com/admin/blogs/481307 引用3. 现有一个主程序用Java语言写成。现在要允许第三方开发人员编写扩展的类,约定第三方开发的类必须包含一个实现了某个已知接口(如interface IFooPlugin)的类,名称不限。 ...
问题贴:http://cloverprince.iteye.com/blog/481307 引用 2. 现有一个主程序用C++语言写成。现在要允许第三方开发人员编写扩展的类,约定第三方开发的类必须包含一个继承自某个已知类(如class FooPlugin)的子类,名称不限。如果要求第三方的类必须与主程序的二进制代码分开发布,把dll或so丢在某个文件夹内即可被动态装载使用,应如何实现? 回答: 和C一样,使用shared object和动态装载。但是不同的是,由于需求中以“类”为插件的单位,类相当于一种数据类型(和算法),而数据类型并不是so中可以储存的东西。所以,我们必须转而储存过程。 ...
问题贴:http://cloverprince.iteye.com/blog/481307 引用1. 现有一个主程序用C语言写成。现在要允许第三方开发人员编写扩展的模块,约定第三方开发的模块必须提供一系列已知名称的函数(如 foo(),bar(),baz())。如果要求第三方的模块必须与主程序的二进制代码分开发布,把dll或so丢在某个文件夹内即可被动态装载并使用,应如何实现? 回答: 操作系统提供了shared object的动态装载功能。定义在dlfcn.h中。调用dlopen()打开插件,dlsym()获取函数,dlclose()关闭插件。 适用于: *nix。在Li ...
======== 第一组 ======== 1. 现有一个主程序用C语言写成。现在要允许第三方开发人员编写扩展的模块,约定第三方开发的模块必须提供一系列已知名称的函数(如 foo(),bar(),baz())。如果要求第三方的模块必须与主程序的二进制代码分开发布,把dll或so丢在某个文件夹内即可被动态装载并使用,应如何实现? 2. 现有一个主程序用C++语言写成。现在要允许第三方开发人员编写扩展的类,约定第三方开发的类必须包含一个继承自某个已知类(如class FooPlugin)的子类,名称不限。如果要求第三方的类必须与主程序的二进制代码分开发布,把dll或so丢在某个文件夹内即可被动 ...
中国的居民身份证有18位。其中前17位是信息码,最后1位是校验码。每位信息码可以是0-9的数字,而校验码可以是0-9或X,其中X表示10。 身份证校验码算法: 设18位身份证号序列从左到右为: 引用a[0], a[1], a[2], a[3], ..., a[16], a[17] 其中a[i]表示第i位数字,i=0,1,2,...,17,如果最后一位(校验位)是X,则a[17]=10 每一位被赋予一个“权值”,其中,第i位的权值w[i]的计算方法是: 引用w[i] = 2**(17-i) % 11 其中,i=0,1,2,3,...,17,运算符按Python惯例:x**y表示x的y次方,x ...
意大利面条代码是一种很直接的实现方法。但是,毕竟日后维护会引发不便。 不包含加密和文件传输飞鸽程序可以分解成两部分: 1. GUI。呈现图形界面,相应用户输入。实际上就是把读取键盘的线程变成GUI而已,但是已经不包含了任何与网络相关的部分,如socket维护等。这里维护系统状态,如邻居表:就是通讯录,记录每个邻居的IP地址、用户名、主机名、昵称、群组、在线情况(以及可用的加密算法等)。 2. Communicator,通信器。负责维护socket,接收和解析数据报、并根据GUI发来的请求,组装相应的报文,发出相应的报文。本身唯一的状态就是socket本身。 这里GUI作为主对象,创建和控 ...
(不完整列表,不定期更新) == 官方网站 == 网站:http://www.ipmsg.org/ 收录了Windows/Win16/Mac/X11/GTK等平台上的众多实现。 == iptux == 网站:http://code.google.com/p/iptux/ 平台:gtk 消息加密:无 文件传输:有 协议扩展:头像、文件共享、消息群发 用C++实现,但直接使用了GTK而不是gtkmm。实现了文件传输,没有实现加密。扩展了“头像”功能。
最朴素的实现就是过程化的方法。 简单起见,实现使用命令行界面。分成两个线程,一个用于接受键盘输入,另一个用于接受UDP Socket的输入。 警告:代码十分纠结,堪比意大利面条。初学者和OO程序员切勿模仿。 第一部分是初始化。 #!/usr/bin/env python import threading import socket import constants # 存放飞鸽协议需要的常数,一般为IPMSG_*的形式 import pdu # 自动构造数据报报文的模块,略。 PORT = 2425 # 飞鸽使用2425端口 MAX_PACKE ...
Global site tag (gtag.js) - Google Analytics