精易论坛

标题: 进程通讯 共享内存例子 [打印本页]

作者: 岛国秋刀鱼    时间: 2024-6-26 14:09
标题: 进程通讯 共享内存例子

精易模块直接就有对应api不用自己  不用自己再声明 愿意自己声明也可以自己去查对应api
这个是创建一个共享的进程
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
hMapFile整数型 
lpMapAddress整数型 
ff文本型 
ff = “我是啊啊啊啊”
hMapFile = CreateFileMappingA ( #INVALID_HANDLE_VALUE, 0, #PAGE_READWRITE, 0, 1024, “MyCustomSharedMemory”)  ' 创建一个共享名叫MyCustomSharedMemory 这个名字可以自定义 的共享内存空间大小为1024可根据实际需求申请类似申请内存’
调试输出 (hMapFile)
lpMapAddress = MapViewOfFile (hMapFile, #FILE_MAP_ALL_ACCESS, 0, 0, 1024)  ' ’加入这个申请的‘’内存空间‘’返回的是内存地址跟申请内存的意思差不多可以对这一块内存自行处理或者写入数据
写到内存 (ff, lpMapAddress, )  ' ’尝试把一段字符串写进去可以是图片或者文件 不过要注意申请空间是否足够大



i支持库列表   支持库注释   
spec特殊功能支持库
const(未知支持库)


然后加入这个共享的进程
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
hMapFile整数型 
lpMapAddress整数型 
bb字节集 
hMapFile = OpenFileMappingA ( #FILE_MAP_ALL_ACCESS, 0, “MyCustomSharedMemory”)  ' 根据创建那边约定好的名称MyCustomSharedMemory加入这个空间’
调试输出 (hMapFile)
lpMapAddress = MapViewOfFile (hMapFile, #FILE_MAP_ALL_ACCESS, 0, 0, 1024)  ' _查看文件映射对象 将一个文件映射对象映射到当前应用程序的地址空间, 这个就类似于得到这个内存地址也可以读 或者写入等等注意申请那边的大小一致’
调试输出 (lpMapAddress)
调试输出 (指针到文本 (lpMapAddress))  ' 这里调试输出之前写入的字符串’也可以    '指针到字节集 (, )'  等等操作 两个进程都可以对这一区域进行读写操作



i支持库列表   支持库注释   
const(未知支持库)
spec特殊功能支持库


作者: 南少    时间: 2024-6-26 14:30
感谢分享。
作者: wuqingg    时间: 2024-6-26 14:36

作者: 易语飞扬    时间: 2024-6-26 14:38

感谢分享。
作者: 艾玛克138    时间: 2024-6-26 15:04
感谢老大的无私奉献!!!
作者: hjinpwhe1    时间: 2024-6-26 15:18
看看学习下
作者: kyo9766    时间: 2024-6-26 15:23
简单实用,感谢分享
作者: 易神    时间: 2024-6-26 15:58
感谢分享,很给力!~
作者: FanLi    时间: 2024-6-26 18:37
大佬可以写一个易语言和python进程通信的例子吗
作者: 岛国秋刀鱼    时间: 2024-6-26 18:50
FanLi 发表于 2024-6-26 18:37
大佬可以写一个易语言和python进程通信的例子吗

很简单啊用易语言搞个服务端 我直接用的服务器组件 不过建议你用tcp之类的方式论坛方法很多自己搜
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
_服务器1_客户进入  
调试输出 (服务器1.取回客户 ())
子程序名返回值类型公开备 注
_服务器1_数据到达  
调试输出 (到文本 (服务器1.取回数据 ()))


i支持库列表   支持库注释   
spec特殊功能支持库


正在进行名称连接...
正在统计需要编译的子程序
正在编译...
正在生成主程序入口代码
程序代码编译成功
正在封装易格式目的代码
开始运行被调试程序
* “127.0.0.1:54471”
* “Hello, Server!”
被调试易程序运行完毕

测试输出的


往下是py里面的连接这个服务器并发送数据等等  不就通讯了吗?
[Python] 纯文本查看 复制代码
import socket

def tcp_client():
    # 创建一个TCP/IP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接到服务器
    server_address = ('127.0.0.1', 7894)
    print(f'连接到服务器 {server_address}')
    client_socket.connect(server_address)

    try:
        # 发送数据
        message = 'Hello, Server!'
        print(f'发送: {message}')
        client_socket.sendall(message.encode())

        # 接收数据
        data = client_socket.recv(1024)
        print(f'收到: {data.decode()}')

    finally:
        print('关闭连接')
        client_socket.close()

if __name__ == '__main__':
    tcp_client()

作者: 岛国秋刀鱼    时间: 2024-6-26 18:53
标题: MyCustomSharedMemory
本帖最后由 岛国秋刀鱼 于 2024-6-26 18:55 编辑
FanLi 发表于 2024-6-26 18:37
大佬可以写一个易语言和python进程通信的例子吗

还可以调用winapi跟帖子上说的一样创建一个共享 然后用py加入这个内存区域下面是大致的方法自己调试
[Python] 纯文本查看 复制代码
import ctypes
from ctypes import wintypes

# 定义Windows API函数和常量
OpenFileMappingA = ctypes.windll.kernel32.OpenFileMappingA
OpenFileMappingA.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.LPCSTR]
OpenFileMappingA.restype = wintypes.HANDLE

MapViewOfFile = ctypes.windll.kernel32.MapViewOfFile
MapViewOfFile.argtypes = [wintypes.HANDLE, wintypes.DWORD, wintypes.DWORD, wintypes.DWORD, ctypes.c_ulonglong]
MapViewOfFile.restype = wintypes.LPVOID

UnmapViewOfFile = ctypes.windll.kernel32.UnmapViewOfFile
UnmapViewOfFile.argtypes = [wintypes.LPCVOID]
UnmapViewOfFile.restype = wintypes.BOOL

CloseHandle = ctypes.windll.kernel32.CloseHandle
CloseHandle.argtypes = [wintypes.HANDLE]
CloseHandle.restype = wintypes.BOOL

# 共享内存名称
shared_memory_name ="MyCustomSharedMemory"
# 打开文件映射对象
file_mapping_handle = OpenFileMappingA(
    wintypes.FILE_MAP_ALL_ACCESS,  # 访问权限
    False,  # 是否继承句柄
    shared_memory_name  # 共享内存名称
)

if file_mapping_handle == 0:
    print("Failed to open file mapping object")
    exit(1)

# 映射视图
mapped_view = MapViewOfFile(
    file_mapping_handle,  # 文件映射对象句柄
    wintypes.FILE_MAP_ALL_ACCESS,  # 访问权限
    0,  # 高位偏移
    0,  # 低位偏移
    0  # 映射大小(0表示整个文件映射对象)
)

if mapped_view == 0:
    print("Failed to map view of file")
    CloseHandle(file_mapping_handle)
    exit(1)

# 现在你可以使用 mapped_view 来访问共享内存
# 例如,读取或写入数据

# 示例:写入数据到共享内存
data_to_write = b"Hello, Shared Memory!"
ctypes.memmove(mapped_view, data_to_write, len(data_to_write))

# 示例:从共享内存读取数据
buffer = ctypes.create_string_buffer(len(data_to_write))
ctypes.memmove(buffer, mapped_view, len(data_to_write))
print("Read from shared memory:", buffer.value.decode())

# 解除映射视图
if not UnmapViewOfFile(mapped_view):
    print("Failed to unmap view of file")

# 关闭文件映射对象句柄
if not CloseHandle(file_mapping_handle):
    print("Failed to close file mapping object handle")



作者: 笨来无一悟    时间: 2024-6-26 21:22
功德无量
作者: 夏亿    时间: 2024-6-26 21:55
支持开源~!感谢分享
作者: 亿意亦易    时间: 2024-6-26 22:33
支持大佬
作者: bianyuan456    时间: 2024-6-27 00:08
已经顶贴,感谢您对论坛的支持!
作者: lqylbh    时间: 2024-6-27 01:59
感谢分享,很给力!~
作者: 查过    时间: 2024-6-27 07:26
感谢分享,很给力!~
作者: 豆豆灰常开心    时间: 2024-6-27 07:31
下个学习一下
作者: year1970    时间: 2024-6-27 07:55
感谢分享
作者: 一指温柔    时间: 2024-6-27 09:28
感谢分享,很给力!~
作者: ctry78985    时间: 2024-6-27 10:44
感谢分享
作者: 小坏人    时间: 2024-6-27 10:55
感谢分享,很给力!~
作者: 查过    时间: 2024-6-28 07:38
感谢发布原创作品,精易因你更精彩!6666666666666
作者: 豆豆灰常开心    时间: 2024-6-28 07:42
感谢您对论坛的支持!
作者: 光影魔术    时间: 2024-6-28 08:05
感谢分享源码
作者: please    时间: 2024-6-28 09:37
感谢分享,支持开源!!!
作者: pq9999    时间: 2024-6-28 14:48
感谢分享
作者: qq977352880    时间: 2024-6-30 02:30
感谢分享,很给力!~

作者: 胖子葛格    时间: 2024-7-2 18:58
感谢分享。
作者: pq9999    时间: 2024-7-16 10:56
  谢谢,楼主分享
作者: jia201314973    时间: 2024-8-4 09:09
支持开源~!感谢分享
作者: pjshow    时间: 2024-9-21 00:09
没看到下载地址呀
作者: 你送的花开了    时间: 2024-10-31 20:30
jy模块里面好像没有FILE_MAP_ALL_ACCESS这个常量
作者: nunu0530    时间: 2025-6-24 11:14
支持开源~!感谢分享




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4