急,请问多用户与dll控件通信的问题

问题描述

我有个软件提供了个dll控件,其中根据这个控件api可以与软件数据通信。我分别用name1和name2两个用户名登录了软件(用程序多开器打开了2个软件实例去登录),但当我在c#工程里引入这个dll后,发现通过这个dll只能与一个帐号name1数据通信,而name2虽然登录了软件却无法通信。请问我想通过dll获取到多个帐号的信息,该怎么做比如是否可以这样:即能不能多拷贝一份dll,让每个dll与每个账户通信互不干扰?谢谢!!!

解决方案

解决方案二:
使用缓存,把新登录的用户加入到dll的构造函数中
解决方案三:
引用1楼hdhai9451的回复:

使用缓存,把新登录的用户加入到dll的构造函数中

谢谢,dll是添加引用进去的,怎么加入到构造函数?你能说说实现的大体步骤吗,十分感谢!!
解决方案四:
要看dll怎么实现的。是不是使用了特定的端口。那么你复制两份代码,指定不同的端口就可以同时通讯了。
解决方案五:
引用3楼devmiao的回复:

要看dll怎么实现的。是不是使用了特定的端口。那么你复制两份代码,指定不同的端口就可以同时通讯了。

那个dll,我在项目中引用后,构造实例,他就自动与软件的一个帐号连接,如果软件开了多个登录了多个帐号,dll也只连接一个。
解决方案六:
比如登陆时,后登陆的用户与先登陆的用户,某些数据被覆盖之类,与dll实现有关如果一开始就设计好是不应该出现这种问题的,在同一个软件中,也不应该去复制dll引用
解决方案七:
引用5楼dongxinxi的回复:

比如登陆时,后登陆的用户与先登陆的用户,某些数据被覆盖之类,与dll实现有关如果一开始就设计好是不应该出现这种问题的,在同一个软件中,也不应该去复制dll引用

谢谢,软件和dll都是别人开发的,我现在可以开多次软件实例,实现登录多个用户。登录上去之后在软件上是可以正常操作数据的。dll是软件提供的api,现在我在c#引入dll中,发现不管软件登录了多少用户名,但dll只能与最后登录的那个用户名,而别的用户名获取不到。所以现在我想有没有什么办法,可以隔壁这几个dll,让每个用户名独立连接一个dll通信?不好意思,问题有点复杂,望请指点下,不知有何办法实现
解决方案八:
引用楼主wwwww112233的回复:

我有个软件提供了个dll控件,其中根据这个控件api可以与软件数据通信。我分别用name1和name2两个用户名登录了软件(用程序多开器打开了2个软件实例去登录),但当我在c#工程里引入这个dll后,发现通过这个dll只能与一个帐号name1数据通信,而name2虽然登录了软件却无法通信。请问我想通过dll获取到多个帐号的信息,该怎么做比如是否可以这样:即能不能多拷贝一份dll,让每个dll与每个账户通信互不干扰?谢谢!!!

联系供应商给你提供另外一个dll。如果你这个dll的提供商不懂技术,那么可能它给你的dll是有bug的。即使有bug也很难告诉你怎样才能让人家的dll出现你说的这个bug。
解决方案九:
你这个问题就相当于“我发现医院住院部里同一个病人只能提供一张病床,有什么办法让我一个人占5占病床、而且我躺在不同的病床上时护士们都认为我是不同的病人?”。
解决方案十:
你应该问提供你dll的厂商,因为这是业务逻辑。人家如果这样设计了业务逻辑,就会用技术方法来实现它。遇到你不理解的软件功能,你应该问供应商“业务逻辑设计是否就是这样?”。不要以为任何软件功能都是开发人员瞎拼凑出来、于是使用者胡乱鼓捣几下就能改变软件功能的。
解决方案十一:
软件商的dll其实就是软件的一个api接口,当在项目中引用了这个dll,当登录软件的时候,我这个引用了dll的工程就能取得软件上的信息。我使用程序多开器打开了软件的多个实例,使用不同的账户登录上去都没问题。但是用他的dll接口时,发现只能识别到一个用户而已。我的意思,既然我已经登录了两个用户,理论上我可以新建两个项目引用dll,但是只能得到一个用户的信息。等待大神指点
解决方案十二:
引用10楼wwwww112233的回复:

软件商的dll其实就是软件的一个api接口,当在项目中引用了这个dll,当登录软件的时候,我这个引用了dll的工程就能取得软件上的信息。我使用程序多开器打开了软件的多个实例,使用不同的账户登录上去都没问题。但是用他的dll接口时,发现只能识别到一个用户而已。我的意思,既然我已经登录了两个用户,理论上我可以新建两个项目引用dll,但是只能得到一个用户的信息。等待大神指点

问下你的dll的供应商,看是不是dll里面做了限制的
解决方案十三:
改下名字,然后分别引用,应该就可以了。比如RRU.dll,拷贝一份,两个dll改为RRUA.dll和RRUB.dll。之前做的一个项目,改成这样就可以了
解决方案十四:
如果你能让软件根据用户名的不同引用不同的dll,那就拷贝一份呗,不行的话只能跟供应商沟通了。
解决方案十五:
引用12楼stylesheet的回复:

改下名字,然后分别引用,应该就可以了。比如RRU.dll,拷贝一份,两个dll改为RRUA.dll和RRUB.dll。之前做的一个项目,改成这样就可以了

这样修改之后,但是命名空间还是一样。我试着修改了dll的命名空间,但那无法初始化。貌似dll实例化的时候,是直接和程序挂钩通信,所以修改命名空间后不能实例化。现在程序本来是只能登录一个账户的,但是我用程序多开器的办法登录了多个账户,都能正常运行。唯独就是使用api的时候,里面只能识别第一个登录的用户。太难了。。。
解决方案:

解决方案:
没看懂你的软件到底是怎么个工作流程,比如所谓登陆,是登陆到哪,连外网服务器?而DLL究竟起什么作用,不引入DLL也能登陆?还是登陆本身就是通过DLL实现的?如果你根本不了解DLL的工作,谈何改
解决方案:
引用16楼Z65443344的回复:

没看懂你的软件到底是怎么个工作流程,比如所谓登陆,是登陆到哪,连外网服务器?而DLL究竟起什么作用,不引入DLL也能登陆?还是登陆本身就是通过DLL实现的?如果你根本不了解DLL的工作,谈何改

登录软件不需要dll。直接打开软件输入用户名密码就可登录。dll的作用给出了一些软件的接口,去实现自己的操作。前提是你必须在软件上登录成功才能使用Dll。打个比方,比如你登录qq之后,有个dll的api,允许你利用这个dll中的接口qq去实现收发消息,但是登录qq这个“登录”操作,在dll里没有。也就是说,只有当你电脑登录qq之后,这个dll才能发挥作用。现在我的遇到问题是,我在电脑上可以登录上多个qq帐号,但是发现在dll中,只能获取到最后登录的帐号的信息。我想问,有什么办法能够在dll中可以识别到所有的登录账户信息?前面他们回答的拷贝一个dll修改名字,再新建一个工程,我试过了,命名空间一样,还是只能识别最后那个账户而已。
解决方案:
没看懂。你说的;如果是一个软件多用户登录用公共缓存;如果是每登录一个用户都会打开一个新的进程用内存映射做共享内存;
解决方案:
所以,你登陆软件和dll根本不在一个程序里.而dll只不过是到进程里去找对应的程序那你dll改什么名,开几次,也都是同样的功能,除非修改dll里的代码让它能够识别多个进程
解决方案:
引用18楼lukebaby的回复:

没看懂。你说的;如果是一个软件多用户登录用公共缓存;如果是每登录一个用户都会打开一个新的进程用内存映射做共享内存;

谢谢,我这个是开多个软件实例,登录多个用户。程序打开一次只能登录一个用户。如何使用那个dll来识别多个登录用户,可否介绍一下思路?谢谢!
解决方案:
引用19楼Z65443344的回复:

所以,你登陆软件和dll根本不在一个程序里.而dll只不过是到进程里去找对应的程序那你dll改什么名,开几次,也都是同样的功能,除非修改dll里的代码让它能够识别多个进程

对,登录软件和dll不在一个程序里。软件为了让用户可以编程,所以发布了一个dll接口。但是实际中我开了多个软件的实例,而且也已经登录了多个用户,但是dll却无法识别多个账户。只能识别最后登录的那个。
解决方案:
引用20楼wwwww112233的回复:

Quote: 引用18楼lukebaby的回复:
没看懂。你说的;如果是一个软件多用户登录用公共缓存;如果是每登录一个用户都会打开一个新的进程用内存映射做共享内存;

谢谢,我这个是开多个软件实例,登录多个用户。程序打开一次只能登录一个用户。如何使用那个dll来识别多个登录用户,可否介绍一下思路?谢谢!

用内存映射做共享内存,把所有登录Session放这共享内存里;然后每次登录判断共享内存里这个用户是否已经登录就行了;
解决方案:
引用22楼lukebaby的回复:

Quote: 引用20楼wwwww112233的回复:
Quote: 引用18楼lukebaby的回复:
没看懂。你说的;如果是一个软件多用户登录用公共缓存;如果是每登录一个用户都会打开一个新的进程用内存映射做共享内存;

谢谢,我这个是开多个软件实例,登录多个用户。程序打开一次只能登录一个用户。如何使用那个dll来识别多个登录用户,可否介绍一下思路?谢谢!

用内存映射做共享内存,把所有登录Session放这共享内存里;然后每次登录判断共享内存里这个用户是否已经登录就行了;

还有登录逻辑如果在远程的话。就可以在远程判断用户登录状态啊。已经登录的用户不让登录不就得了。
解决方案:
回楼上,拜托你看下我的需求……
解决方案:
引用19楼Z65443344的回复:

所以,你登陆软件和dll根本不在一个程序里.而dll只不过是到进程里去找对应的程序那你dll改什么名,开几次,也都是同样的功能,除非修改dll里的代码让它能够识别多个进程

是的,软件和dll本身都是软件商提供的。他提供dll的目的是为了让登录的用户可以读取出软件的信息。但是,我现在登录2个用户,使用他的dll发现只能里面只能识别到第一个登录的用户。这是他们的策略,我是问有没有办法能识别到多个用户?比如多建一个工程使得两个dll各自识别一个用户?或者采取别的办法?谢谢!

时间: 2024-09-20 03:38:27

急,请问多用户与dll控件通信的问题的相关文章

PB9.0用sinsock控件通信,用getdata()取不到数据。

问题描述 PB9.0用sinsock控件通信,用getdata()取不到数据. PB9.0用sinsock控件通信,参考实例http://www.shangxueba.com/jingyan/107976.html:发现接收数据代码:? winsock_a/*或winsock_b*/.object.getdata (def datastr1) 好像语法有问题getdata(def datastr1) 里面的def报错.去掉def不报错,但取不到数据. 解决方案 http://www.excelp

请问android中的控件被无论如何引用后是不是操作的都是同一个控件

问题描述 请问android中的控件被无论如何引用后是不是操作的都是同一个控件 我写了一个简单的test安卓程序,就是点击菜单textview中的文字变色,这个程序是在上一个练习--实现listview显示列表,然后我发现虽然我引用的都是同一个控件,但是只有textview中的文字变色了,可是listview中的文字却没有变色,实在想不明白,莫非不是同一个textview控件吗???? 补上源代码: protected void onCreate(Bundle savedInstanceStat

仿京东网那样的商品比较的功能请问是用什么控件做的呢?横向的也用gridview么?

问题描述 仿京东网那样的商品比较的功能请问是用什么控件做的呢?横向的也用gridview么? 仿京东网那样的商品比较的功能请问是用什么控件做的呢?横向的也用gridview么? 解决方案 直接用html表格其实就可以,两边的属性比较,相同的合并单元格 解决方案二: 可以用GridView嵌套ScrollView做

360极速模式-谷歌浏览器无法加载ocx控件和C#写的dll控件,是签名问题吗?

问题描述 谷歌浏览器无法加载ocx控件和C#写的dll控件,是签名问题吗? 公司的一个销售系统读取IC卡和读取地磅数据时需要用到一些控件,360的极速模式应该是谷歌内核加载不上控件当然谷歌浏览器也这样,有的地方网速不好客户需要使用极速模式,但我在网上查找了资料有说不兼容,不知道是不是,如果是不兼容该怎么解决 解决方案 谷歌浏览器不兼容,ocx是activex技术,只支持IE浏览器. 解决方法可以试试这个, http://code.google.com/p/ff-activex-host/ htt

请问rdlc用矩阵控件如何实现多表头的效果啊

问题描述 请问rdlc用矩阵控件如何实现多表头的效果啊 解决方案 解决方案二:不會,學習解决方案三:大表头上面加个分组条件,然后输入表头解决方案四:??听不懂,能说得详细点吗?解决方案五:该回复于2009-04-30 10:47:09被版主删除

请问怎么给imagecombo控件前面加上虚线?

问题描述 请问怎么给imagecombo控件前面加上虚线? 请问怎么给imagecombo控件前面加上虚线?类似在treeview控件中看到的效果,怎么添加?

请问能否在datagrid控件中使用使用右键菜单,并能实现类似access表里选中要筛选的字然后右键使用按选定内容筛选!麻烦举例子,或有类似的文章推荐一下。谢谢!!!!

问题描述 请问能否在datagrid控件中使用使用右键菜单,并能实现类似access表里选中要筛选的字然后右键使用按选定内容筛选!麻烦举例子,或有类似的文章推荐一下.谢谢!!!! 解决方案 解决方案二:需要不少的JS的知识的.还是老老实实的搞普通的吧.解决方案三:上百度查查吧.解决方案四:个人感觉老拿cs结构的软件操作想在web程序上面实行,就是不明智的选择.谁在浏览网页的时候知道有右键功能啊?解决方案五:自己做一个ajaxGrid,不过对javascript的驾驭能力要相当高才行.看看下面的文

[注册表]注册DLL控件 让IE浏览器复活_注册表

近日,也不知怎么了,单位网络中的许多工作站IE无法打开新窗口了,表现为:在浏览网页过程中,单击超链接无任何反应.问题的原因在于IE新窗口模块被损坏所致,解决的方法早已是公开的秘密,单击"运行",依次运行"regsvr32 actxprxy.dll"和"regsvr32 shdocvw.dll"将这两个DLL文件注册,然后重启系统,如果还不行,则可以将mshtml.dll,urlmon.dll,msjava.dll, browseui.dll, o

dll控件可以直接添加到工具箱里面吗?

问题描述 各位大哥,小弟我在网上下了一个控件,但是下来后发觉是dll后缀的,请问我要怎么样才能把它导进来像其他控件一样拖到窗体上面就能用啊?我查了很久资料发觉都只能用引用的方法导进来,但是引进来不能像其他的控件一样拖到窗体上啊,请问是不是不能照我想象中那么做,只能用引用的方法啊?还有若是不行,我该怎么用这个dll文件啊,在程序中用写代码的形式手动的new一个?而这dll为什么没有像java里面的提供的jar时候的javadoc文件进行说明我该怎么使用啊?有点罗嗦,谢谢 解决方案 解决方案二:dl