有没有做过vb6.0 和C#4.0 内存共享数据的?

ggt87125 2016-12-11 10:49:03
我想C# 实时传递一个数 ,然后vb实时获取。 有没有什么好的办法。 不想用stock

有没有做过vb6.0 和C#4.0 内存共享数据的? 这个方法可不可行呢。
...全文
469 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggt87125 2017-01-28
  • 打赏
  • 举报
回复
谢谢各位答复 ,新年快乐!
threenewbee 2016-12-31
  • 打赏
  • 举报
回复
可以用socket或者管道通讯
赵4老师 2016-12-30
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
捧剑者 2016-12-28
  • 打赏
  • 举报
回复
用socket......
舉杯邀明月 2016-12-12
  • 打赏
  • 举报
回复
如果是“发送数值”,VB程序中用HOOK窗口消息的方法, C#用“窗口消息”方式发送就行了。 不管连续发送的消息(数据值)是否相同,都可以接收和处理。
Tiger_Zhao 2016-12-12
  • 打赏
  • 举报
回复
两个exe直接通讯?
可以直接通过API修改TextBox内容来进行“实时通讯”。
' Form1
' 放一个TextBox
Option Explicit

Private Sub Text1_Change()
MsgBox "收到消息:" & Text1
End Sub

// Form1
// 放一个 TextBox,一个 Button
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
#region "API"
[DllImport("User32.dll",EntryPoint= "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll",EntryPoint= "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport("User32.dll",EntryPoint= "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, string lParam);

const int WM_SETTEXT = 0xC;

#endregion

private void SendText(String text)
{
string lpszFormClass = "ThunderRT6FormDC"; //如果是在VB-IDE中启动的,用 ThunderFormDC
string lpszTextClass = "ThunderRT6TextBox";//如果是在VB-IDE中启动的,用 ThunderTextBox
string lpszFormWindow = "Form1"; //窗口标题

IntPtr hWndForm = new IntPtr(0);
IntPtr hWndText = new IntPtr(0);

hWndForm = FindWindow(lpszFormClass,lpszFormWindow);
if (hWndForm.Equals(IntPtr.Zero))
{
MessageBox.Show("窗体不存在!");
return;
}

hWndText = FindWindowEx(hWndForm, hWndText, lpszTextClass, null );
if (hWndText.Equals(IntPtr.Zero))
{
MessageBox.Show("TextBox不存在!");
return;
}
SendMessage(hWndText, WM_SETTEXT,0, text);
}

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SendText(textBox1.Text);
}
}
}

缺点是两次消息一样就不会触发 Text1_Change() 事件。
可以考虑加上时间或序列号之类的,保证每次都不一样。
vansoft 2016-12-12
  • 打赏
  • 举报
回复
vb6中注册一个类,C#中直接getobject,得到这个类。
赵4老师 2016-12-12
  • 打赏
  • 举报
回复
在RAMDisk上共享一个文件。

1,486

社区成员

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

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