VB实现进程间通信,不用API

王二.麻子 2010-03-22 02:27:53
加精
仅仅用VB就可以实现进程间通信,而且是同步通信哦

这个是可能的 , 下面就是例子

例子的来源是MSDN,很早在MSDN上面看到的,后来找不到了,这次是从MSDN中VB例程cofee例程上摘录的,原理相同,都是用active,自定义事件.

1创建一个Active Exe工程,我叫pro_comm_pro吧,
2 添加一个标注模块 , Module1.bas:
Public gCLS1 As cls1 '全局变量,保存对分发消息的类对象cls1的引用,以前没有定义为Public,不可以运行
3 添加类cls1.Cls
修改这个类的属性: Instancing = 2 'PublicNotCreate,不可以从外部进程创建
其他属性使用默认
4 添加如下代码到cls1.Cls:
Private mvarmVal As String '属性变量
Public Event ValChange(vData As String)'通知事件
Public Property Let mVal(ByVal vData As String)
mvarmVal = vData
RaiseEvent ValChange(vData)
End Property
Public Property Get mVal() As String
mVal = mvarmVal
End Property
5 添加一个类clsH.Cls , 这个类仅仅是个接口, 没有多少功能的.属性默认, 代码如下:
 Public Property Get GetCls() As Variant
If gCLS1 Is Nothing Then
Set gCLS1 = New cls1
End If
Set GetCls = gCLS1
End Property
...
这个工程就完成了 , 生成exe文件吧, 我叫的是pro_comm_pro.exe

另外新建一个标注工程
1 新建工程
2工程->引用->浏览,选择我们pro_comm_pro.exe
3 在form1添加个command1 , 添加如下代码在form1.frm里面, 呵呵:

 Dim WithEvents ss As cls1'ss,事件通知我们数据改变
Dim cc As clsH '连接器对象
'按这个按钮,修改cls1(ss)的属性值
Private Sub Command1_Click()
ss.mVal = Time
End Sub
'初始连接器cc,初始cls1,事件分发对象ss
Private Sub Form_Load()
Set cc = New clsH
Set ss = cc.GetCls
End Sub
'接受到数据改变事件
Private Sub ss_ValChange(vData As String)
Form1.Caption = ss.mVal
End Sub
4 编译生成工程吧 , 我交cli.exe
运行2个cli.exe , 点击command1, 会看到, 两个窗口同时改变,需要更多同步信息,看自己想法了
...全文
5121 131 打赏 收藏 转发到动态 举报
写回复
用AI写文章
131 条回复
切换为时间正序
请发表友善的回复…
发表回复
AddDark 2011-10-09
  • 打赏
  • 举报
回复
留个记好
王二.麻子 2011-01-18
  • 打赏
  • 举报
回复

VB不过是用了好多API

C不用API?

要不您直接说,用机器码写程序的都是您目标得了。多没劲呀

VB存在有他的原因,难道必须每个人都C++,.Net?


m_nAdrs 2010-12-31
  • 打赏
  • 举报
回复
VB 额, 刚接触了 - -
fzx4936 2010-12-28
  • 打赏
  • 举报
回复
学习ing
熊孩子开学喽 2010-12-25
  • 打赏
  • 举报
回复
更简单的是用DDE来做,拉两个控件设置一下属性就可以实现
东方之珠 2010-12-25
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 lyserver 的回复:]
实际上是用了API的,本机COM通讯使用的是LPC,远程COM(即DCOM)使用的是RPC,都是以存根和代理形式实现的,它们背后有一大堆API。
[/Quote]


顶一个!
zjhaag 2010-12-24
  • 打赏
  • 举报
回复
这个帖子怎么这么火啊~~
hjker007 2010-08-07
  • 打赏
  • 举报
回复
mark,学习一下
j13320087882 2010-07-30
  • 打赏
  • 举报
回复
招兼职 调查填表任务,100元/天,大约工作2小时左右
要求得会发送email因为很多任务都是到邮箱里确认,每天大约需要2小时,时间您自己定,完成任务后第3天付款(有些调查需要审核,胡乱填写是无法通过的)所以请务必认真;

(加入兼职网不需交任何费用,需要交费的都啥意思您懂得- -!)

点击这里马上注册:http://tinyurl.com/1227365

Simon217 2010-07-29
  • 打赏
  • 举报
回复
学习来了
my13513480001 2010-04-09
  • 打赏
  • 举报
回复
再次学些,每次都有新收获
sun8000008 2010-03-30
  • 打赏
  • 举报
回复
听课中
kevenquwei 2010-03-29
  • 打赏
  • 举报
回复
mark
Neil198 2010-03-29
  • 打赏
  • 举报
回复
刺眼的小标记
wangkou 2010-03-27
  • 打赏
  • 举报
回复
学习学习
fly1229 2010-03-27
  • 打赏
  • 举报
回复
这个只能建立多个事件,主程序根据事件来判断怎么处理,
要是能直接传递数据就更好了
PC_9527 2010-03-27
  • 打赏
  • 举报
回复
剪贴板可以不用API。。。。。。。。。。。。
my13513480001 2010-03-26
  • 打赏
  • 举报
回复
线程-进程
一直弥漫.............
a1875566250 2010-03-26
  • 打赏
  • 举报
回复
进程通讯,多数使用的是消息通讯,或者管道通讯,我个人感觉消息通讯比较稳定。而且最好是开一个界面线程来进行。
liyoubaidu 2010-03-26
  • 打赏
  • 举报
回复
Active 很少用。
加载更多回复(107)
API之网络函数1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称 WNetGetLastError 获取网络错误的扩展错误信息 WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 GetMessageTime 取得消息队列中上一条消息处理完毕时的时间 PostMessage 将一条消息投递到指定窗口的消息队列 PostThreadMessage 将一条消息投递给应用程序 RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件 DeviceIoControl 对设备执行指定的操作 DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值 FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值 FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间 FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构 FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 FindFirstFile 根据文件名查找文件 FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区 FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘 GetBinaryType 判断文件是否可以执行 GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 GetCurrentDirectory 在一个缓冲区中装载当前目录 GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 GetDriveType 判断一个磁盘驱动器的类型 GetExpandedName 取得一个压缩文件的全名 GetFileAttributes 判断指定文件的属性 GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制 GetFileSize 判断文件长度 GetFileTime 取得指定文件的时间信息 GetFileType 在给出文件句柄的前提下,判断文件类型 GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息
简介:CETool是一个WinCE的辅助程序,使用C语言和Windows API编写,作了一些特殊处理以同时支持WinCE5和WinCE6,主要实现shell中的功能,提供的各种操作涉及到文件系统、窗口管理、进程管理和流程控制几个方面,通过解析配置文件内容来执行相应的操作,属于一种脚本解析程序。程序有以下特点:1. 程序一般是在原路径执行,比如一开始就放置在\Storage Card\目录下,即打开后就以\Storage Card\为工作目录开始处理各项操作。考虑到在程序运程过程中可能要对程序所在分区(或磁盘)进行格式化(或者是移除SD卡)等操作,故添加了一项“自我复制到内存中运行”的功能,即启动后先检测工作目录是不是在内存虚拟出来根目录"\"下,如果不是则先对自身进行复制再重新加载复制后的可执行文件,以便后续的SD移除、或者格式化等操作。对于配置文件,因为是一开始就读进内存中的,所以无需进行复制。此功能一般都不需要使用,即直接在原来的路径运行即可,如需开始此功能,只需将配置文件的文件名从CETool.ini改为_CETool.ini即可。 2. 程序在一次性加载完配置文件后,接着逐行去解析文件内容,遇到注释行或者是格式不正确的行则跳过该行,配置文件有以下特点: (1)配置文件无大小限制,仅取决于物理内存大小,支持Unicode与ANSI编码的文件格式; (2)配置文件中每行的长度无限制,但某些操作的参数对长度有一定限制,如创建目录时,作为目录名的参数的长度有限制(这是文件系统和API的问题)。 (3)各个操作放置的位置、出现的次数无限制。 (4)每一行中的子操作数量无限制。 (5)具有合理的严格性和纠错处理,每一行中在'='后边非关键字处可随意添加空格、制表符、逗号,不影响正常解析,关键内容可以加上引号(单引号和双引号的区别,将在后述提到),如包含空格的路径、参数等。详细介绍参数特殊说明。 3. 支持相对路径的表示方式。参考特殊说明。 4. 支持从文件读入并作为参数的方式(即配置文件中嵌入其它文件,嵌套层数无限制,一般为临时创建的文件,一些不确定参数可以先保存到临时文件,再用此程序读取)。参考特殊说明。5. 支持VB代码嵌入,方便变量使用、判断、循环(这些还有些问题需要解决,将在CETool v2.0中实现)。 此程序涉及内容: 此程序涉及到一些Windows和C语言的基础知识,包括文件系统、注册表、进程、线程、窗口、事件、消息、进程间与线程间通信、脚本、动态库、递归、回调、多维指针、函数指针、数据结构、加密算法等。

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧