- 博客(0)
- 资源 (4)
- 收藏
- 关注
PB11制作的基于UDP协议的局域网聊天程序
这是我用PB11制作的,利用UDP协议技术,在局域网聊天的工具,刚开始想加入文件传输功能,后来尝试了一下觉得利用UDP来传输文件控制和校验太复杂了,这部分注释掉了。聊天程序还是很完善的。希望高人能够完善文件传输部分的功能。
Kair QQ:55092518
2010-07-02
PB调用PB自己制作的COM组件
2010.7.2 在QQ朋友菠菜/yun(1216297)的引导下接触到了PB制作COM组件应用。
1、文件夹A下用COM的向导制作了一个不可视的object,制作了最简单的函数,最后打包成dll文件。
2、利用regsvr32注册了这个dll。
3、文件夹B下用ole方式调用这个dll,并调用里面的方法,测试正常。
注意要点:经过测试可以调用普通函数取得返回值,而当调用函数中有open窗口的语句后,虽然也能打开窗口正常看到窗体中的控件,并且窗口的open事件也能成功执行,哪怕是dw中的数据也能正常显示。但是当鼠标点击任何控件都会报非法操作的提示,关闭窗口也是如此。而文本框的getfocus,losefocus,modify等事件也不会被触发。最后判断为PB调用PB制作的com组件时,只能调用非可视的object做的,而如果含有窗体的,就会经常报非法操作。估计是此种方法不被支持。
测试环境pb11,当A文件夹下程序编译成dll时如果报错,请删掉A目录下生成的没用的dll及其他文件,即可。
如果有哪位高人成功调用了PB下的可视化窗体又不会报错的,请不吝赐教,QQ联系方式如下。
Kair 2010.7.2 QQ:55092518
2010-07-02
ADSL+SoftEtherV1.0安装及经验说明
ADSL如何将SOFTETHER和花生壳结合起来组建局域网?2008年02月19日 星期二 20:4520世纪70年代出生的人对国产动画都情有独钟,还记得有部叫《崂山道士》的动画片,里面有个法术叫“穿墙术”——只要口中念着咒语,凡人都能穿墙而过。要是内网用户也能掌握这种“穿墙”之术,穿过重重防火墙,岂不快哉。
笔者所在的学校有数十台计算机,通过教育网接入互联网。每台计算机都使用教育网分配的固定IP,如10.10.*.*。校内有台安装Windows 2000 Server的文件服务器,常常需要维护。而笔者家中计算机安装的是Windows 2000专业版,使用2Mbps的ADSL,有公网IP。
如果在家中能控制单位的服务器,那就方便了。在网上闲逛时,不料竟发现一个能解决上述问题的关键软件——SoftEther,中文名称叫虚拟网卡。
下面就是笔者使用SoftEther和Remote Administrator以及花生壳三个工具控制内网计算机的过程。
第一步:花生壳的使用
首先在家中的计算机上安装花生壳软件。利用这个软件,无论IP怎么变,始终都有个固定的域名,会极大方便SoftEther的登录。
在安装花生壳软件前,必须到网域科技的网站注册域名(如:abc.vicp.net)。由于步骤简单,这里不再详述了。以后每次开机并上网后,花生壳都会自动登录服务器。
第二步:SoftEther的设置
现在就该主角SoftEther上场了,它的下载地址是http://www.softether.com/jp/,最新正式版是1.0,测试版是2.0,1.0的正式版有汉化版。
下载后先进行安装,安装方法跟大部分软件一样(可参见2004年第4期《电脑报》G1版)。重启计算机后,运行开始菜单里的SoftEther Virtual HUB Administration就可以进行虚拟Hub的管理和设置了。
在弹出的登录界面上选择“This Computer(localhost)”,再单击“Connect”。会出现一个命令行窗口(图1)。由于是第一次登录,软件会要求你正确输入两次密码,下次再进行Hub的管理时需要这个密码。接着为即将连接到这个虚拟Hub的用户创建用户名和密码。选择菜单里的命令1后再选择命令2 (Create User),依次创建两个用户“USER1”和“USER2”并设定好密码,接下来的“Virtual Hub ID”一项是虚拟Hub的编号,必须都输入1,这样两个用户才会都连接到Hub1上(据该软件的介绍,SoftEther能同时管理256个虚拟Hub)。
最后是有关用户权限的设置,按照默认一路回车就行了,至此用户创建成功。Hub1上就有了两个用户,一个用户给家中的计算机使用,另一个就给单位的计算机使用。连续输入两次“9”,退出Hub的管理设置界面。
接下来该把本机的虚拟网卡连接到虚拟Hub1上了。打开SoftEther Connection Manager,你会看见里面已经有一个软件默认的SoftEther.com Sample Hub,这个虚拟的Hub位于日本波筑大学,是软件作者的所在学校(出于安全考虑,建议将这个Hub删除)。
依次打开“Account”菜单中的“New Account”,新建一个连接(图2)。“Name”一项填上“Hub1”,然后选中“Use authentication to connect to the Virtual Hub”,并输入用户名“USER1”和密码。紧接着选中“Direct TCP/IP Connection”协议,并单击“Configure”进行设置。“Address”一项填入本机IP地址:127.0.0.1,Port为默认。
完成以上设置后双击“Hub1”图标进行连接,稍等一会儿就提示“Connection Established”,表明已经连接到虚拟的Hub1了。
而单位服务器的SoftEther软件安装后不需要对SoftEther Virtual Hub Administration进行设置,只需要运行SoftEther Connection Manager进行相似的设置即可。
其中有两处不一样:一是“Use authentication to connect to the Virtual Hub”一项的用户名应填USER2;二是Direct TCP/IP Connection协议配置里的“Address”一项填入“abc.vicp.net”,这个域名是用花生壳申请的免费域名。
在确保家中计算机在线的情况下,双击连接图标,稍候也会出现“Connection Established”的提示,说明USER2用户也连接到Hub1上了。
接下来的工作就是在两台计算机
2009-09-26
在c# 2005中编写com组件,供PB11调用实例(附说明和源码)
在c# 2005中编写com组件,供PB11调用实例,研究了一下午,终于成功了,分享给大家
前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。
1、c#2005中新建项目,类型为类库,项目名为AddCom确定。
配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)”
2、打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调用
3、编写com组件会用到guid(全球唯一ID),编写com组件必须要用到。c#会默认生成一个放在AssemblyInfo.cs,如没有生成,网上下一个生成guid的软件,有很多呢。
4、c#中源代码如下,按如下方法编写代码后生成工程,/bin/release中得到AddCom.dll。
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace AddCom
{
[Guid("298D881C-E2A3-4638-B872-73EADE25511C")]
public interface AddComInterface
{
[DispId(1)]
int iadd(int a, int b);
}
[Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")]
[ClassInterface(ClassInterfaceType.None)]
public class AddComService : AddComInterface
{
public AddComService()
{
}
public int iadd(int a, int b)
{
int c = 0;
c = a + b;
return c;
}
}
}
5、dos下利用 e:\regasm AddCom.dll 命令注册com组件,可以理解为非.net平台下的regsvr32注册dll组件。提示注册成功即可。
6、pb11中利用ole调用来调用com组件,注意,此com组件无法用create ole control的browse查看到,只能利用如下的方法直接动态调用。
integer li_a,li_b,li_total
//----------注册c#生成的com组件------------
OleObject ole_AddCom
ole_AddCom = Create OLEObject
li_rc = ole_AddCom.ConnectToNewObject("AddCom.AddComService") //AddCom为c#中namespace,AddComService为c#中namespace中的class
if li_rc <> 0 then
MessageBox("ConnectToNewObject", string(li_rc) )
return
end if
//----------调用com组件中的函数--------------
li_total = ole_AddCom.iadd(li_a, li_b) //iadd为c#中namespace(AddCom为c)中class(AddComService为c)中的函数(iadd())
完毕
*以上为个人经验,欢迎大家发邮件沟通。
email: kair-china@vip.sina.com
qq: 55092518
2009-02-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人