使用C++对java的classloader进行模拟
转自:使用C++对java的classloader进行模拟
一直以来,觉得java的classloader很不错的,做产品的话,可以将基本的做下来后,将扩展通过classloader的方式来做,将更新的补
丁使用classloader来做,在使用java的网络游戏中,可以将扩展通过classloader的机制,实现动态的更新,省的每次更新要重新下载
客户端,在手机上可是一个很不错的点子。
erlang也支持代码的热部署,java也可以动态更新,那么,C++呢,思来考去,没有想到类似非常完美的方案,只能知道一个基本成型的内容。
现在,不管是windows还是linux,都支持dll,我们可以动态的加载dll,是否可以像java那样,动态的调用函数呢?答案是可以的。需要借
助部分汇编来实现,要知道,我们可能只是知道一个函数的名字,函数参数的类型,参数的个数等等,都是不知道的。因为我更想做一个普遍使用的,而不是要告诉
你:“把某某的头文件给我”。
首先看外表的内容,java的ClassLoader的模拟接口:
ClassLoader.h
01
#ifndef _CLASSLOADER_H_
02
#define _CLASSLOADER_H_
03
#include "define.h"
04
#include "String.h"
05
class
ClassLoader
06
{
07
public
:
08
ClassLoader();
09
ClassLoader(ClassLoader* parent);
10
virtual
~ClassLoader();
11
void
load(
const
String& name);
12
void
* getFun(
const
String& name);
13
private
:
14
ClassLoader* parent;
15
void
* dl_handle;
16
};
17
#endif /* _CLASSLOADER_H_ */
接下来是ClassLoader.cpp
view source
print
?
01
#include "java/lang/ClassLoader.h"
02
#include < dlfcn.h >
03
#include "System.h"
04
ClassLoader::ClassLoader()
05
{
06
&nb
相关文档:
系统环境:Windows 7
软件环境:Visual C++ 2008 SP1 +SQL Server 2005
本次目的:编写一个航空管理系统
这是数据库课程设计的成果,虽然成绩不佳,但是作为我用VC++ 以来编写的最大程序还是传到网上,以供参考。用VC++ 做数据库设计并不容易,但也不是不可能。以下是我的程序界面,后面 ......
在使用队列中,我们一般都会使用循环队列以保证性能
package com.yz.myqueue;
public class Queue {
private Integer size;
private Integer front;
private Integer rear;
private Object[] datas;
public Queue(int size){
this.size=size;
this.front=-1;
this.rear=-1;
datas=new Object[size] ......
总结一:
Java IO的一般使用原则:
一、按数据来源(去向)分类:
1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream
3、是Char[]: CharArrayReader, CharArrayWriter
4、是String: StringBufferInputStream, StringReader, StringW ......
java -cp .;c:\dir1\lib.jar Test
-cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”
分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。
虽然现在都有eclipse之类的IDE ......
JAVA异常可以分为三种:
1.checked 异常
编译器保证所有的checked异常都会得到处理,这样就可以在编译期检查异常处理。通常自定义的异常应该为此类型
2.runtime异常
是JVM在程序运行期发现的无效操作,例如NullPointerException
3.Errors
由JVM检测到的失败操作,例如OutOfMe ......