需求是这样的:1、WinForm程序
2、多人开发,每人实现不同模块功能
3、整个项目和后台建立一个TCP连接,每个模块都要与后台TCP通讯现已做好和后台的TCP连接类,预想的架构是每个人开发一个UserControl,主程序加载UserControl时将TCP连接对象作为参数传入。这样的话主程序和每个模块程序都要有TCP连接类的定义(不同项目中TCP连接类的命名空间都相同),当要将TCP连接类对象作为参数传入时编译通不过,说不能转换改类型。尝试用Marshal.StructureToPtr后再传也不行,不知改怎么弄了,请高人指教。也许我这个架构本身有问题,该怎么改比较好呢?tcpwinform通讯架构
2、多人开发,每人实现不同模块功能
3、整个项目和后台建立一个TCP连接,每个模块都要与后台TCP通讯现已做好和后台的TCP连接类,预想的架构是每个人开发一个UserControl,主程序加载UserControl时将TCP连接对象作为参数传入。这样的话主程序和每个模块程序都要有TCP连接类的定义(不同项目中TCP连接类的命名空间都相同),当要将TCP连接类对象作为参数传入时编译通不过,说不能转换改类型。尝试用Marshal.StructureToPtr后再传也不行,不知改怎么弄了,请高人指教。也许我这个架构本身有问题,该怎么改比较好呢?tcpwinform通讯架构
解决方案 »
- WinForm 做的程序,加了IrisSkin2.dll皮肤后,我的folderBrowserDialog就打不开了..这是怎么回事?
- winform的 datagridview如同excel支持方向键移动焦点 怎样实现?
- 如何处理td里面数据多的情况下,把列撑开,导致整个页面不好看
- 请问怎么把dataGridView里面的数据进行,去重
- 绝对强大的问题,自动开机系统
- 对于类中的只读且需要动态生成的成员一般用属性的get访问器还是用无参数的函数
- 请教 怎么 用C#写数字拼图 游戏 啊 指导下思路
- 如何使ASP.NET的 TREEVIEW遍历并且能动态增删改(要求平台是VS2005
- 如何将数据写入到数据库中的表中(c#连接sql数据库)
- 请问在Web应用里如何知道浏览器当前的本地时间?
- 串口操作 SerialPort
- 怎么在c#中把一个数组中的9个数分别赋值给9个TextBox啊?
实际TCP连接是C++写的COM实现的(多线程,异步,也有通信队列),C#那个类(简称A类吧)仅仅是应用层对数据的组包和分包实现,以及接收COM的回调事件,然后传递给界面线程。A类中定义了一个COM的对象,然后就是定义了一些需要分包组包用到的变量,有HashTable、Dictionary、数组等。但程序的开发已经实现了,现在是在这个程序中要加入其它相似的模块,又要多人同时开发,所以想了分别开发UserControl这个架构,不知是否合理,希望大家能给我点思路。
不会每个模块都定义了一个类吧,只需要在一个dll的工程中定义一次即可。其它工程引用这个工程。
主要是主程序也要用到这个类,现在挠头的就是如何共用类。C++中有头文件,C#中好像类声明和类实现无法分开,可看微软的函数定义(比如定位Control的某些函数),看到的也只有类的函数声明,没有实现部分,也不是Partial类,不知是怎么弄的。你倒是提醒了我,我可以将共用类单独提出来写成一个dll,主程序、各模块程序直接引用即可,这样应该可行。
对头。 C#不需要.h文件,应为assembly是自描述的。直接饮用assembly就可以。
你可以 将 IP地址,端口 等信息 封装传递,在统一的地方 重建 “TCP连接对象”;2.Marshal 看到这个单词,我敏感的觉得:序列化 可能得注意点啥子;
3.“而且我的想法是每个人的UserControl编译成dll供主程序调用,而不是代码和主程序代码一块编译,这样方便日后的升级”——是否 UserControl 有统一的接口? 插件式程序扩展升级 都以接口的标准。
4.Re "g767160":这个答案 很标准——这类似 一种命令模式,将需要执行的 过程和返回值 封装成一个对象,统一调用 某些对象 处理;——————————————————————————————————————
以上回答,并没有完全针对楼主的 BUG;
只是觉得 假如是自己的话,自己可能得注意哪些要点。
谢谢!1.TCP连接对象 —— 这类可能操作硬件通讯的 类,个人觉得 不要进行封装传递 比较好;
你可以 将 IP地址,端口 等信息 封装传递,在统一的地方 重建 “TCP连接对象”;
不行的,主程序建立连接后,只能其他模块共用。这个类是单例模式,同一进程中不同模块(dll)用这个类,不知是否还是单例,回头验证下2.Marshal 看到这个单词,我敏感的觉得:序列化 可能得注意点啥子;
是的,这块我还没深究,肯定是某些类变量不能被序列化,比如那个COM组件对象3.“而且我的想法是每个人的UserControl编译成dll供主程序调用,而不是代码和主程序代码一块编译,这样方便日后的升级”——是否 UserControl 有统一的接口? 插件式程序扩展升级 都以接口的标准。
没错,肯定会有一个标准接口,还有统一的基类各模块的UserControl必须继承4.Re "g767160":这个答案 很标准——这类似 一种命令模式,将需要执行的 过程和返回值 封装成一个对象,统一调用 某些对象 处理;
9楼findcaiyzh的回答已让我想到了这一点,应该是个可行的方案。谢谢你们的进一步确认