[实现][服务器][客户端]怎样让ATL实现的COM服务器与多个客户端连接
09月 17th, 2008 by admin
Posted in VC/MFC | No Comments »
小弟做的COM服务器需要与两个客户端连接,一个是IE,一个是DLL库,现在需要实现的功能是IE发送消息到COM,COM再转发到DLL,通过IDispatch我只能实现IE发送消息到COM,COM怎么样发送到DLL呢?IE和DLL都连接到COM了,但连接表里只有一个连接,我的感觉是他们分别连接了这个COM的两个对象而已,所以连接表里只有一个连接。
你的感觉是对的,有两个组件存在。你可以把你的组件设置成SINGLETON模式,组件只会创建一个,所有客户端共享同一个组件
恩,用jamesshooo兄的方法,单实例模式
我看了,我本来就是Single模式的
class ATL_NO_VTABLE CCmdCtrl :
public CComObjectRootEx <CComSingleThreadModel>,
…
还是不行呢,是不是有其他原因呢?
我在事件接口中查看连接数,如下nConnections每次都为1
int nConnections = m_vec.GetSize();
for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
…
}
你这是单线程套间,不是单实例模式,在类里面添加下面的一句宏就是单实例
public:
DECLARE_CLASSFACTORY_SINGLETON(CCmdCtrl)
果然如此,搞定了,多谢jamesshooo了,一会儿就给分哈。
还有个问题,我能不能从
for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr <IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast <IDispatch*>(sp.p);
…
}
中获取的pDispatch判断到底当前是要调用哪个客户端的函数呢?该怎么判读呢?
果然如此,搞定了,多谢jamesshooo了,一会儿就给分哈。
还有个问题,我能不能从
for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr <IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast <IDispatch*>(sp.p);
…
}
中获取的pDispatch判断到底当前是要调用哪个客户端的函数呢?该怎么判读呢?
只能根据索引来判断,谁第一个挂接连接点的索引小,最后挂接的索引大
study.
自己加了个链表,先将就用,把BOSS忽悠过了再说,没时间研究了。
[实现][ON_COMMAND_RANGE]sdk中怎样实现ON_COMMAND_RANGE
09月 16th, 2008 by admin
Posted in VC/MFC | No Comments »
mfc 中可以用ON_COMMAND_RANGE来实现一个范围消息的映射
但是在sdk中呢?
不可能是写一大堆case吧?
用函数指针数组 也麻烦啊,没有更好的办法吗?
ON_COMMAND_RANGE不就是比较wParam的低16位值的范围么?
搞定了,谢谢啦
[vista][实现][指纹]vista如何实现指纹登录
09月 15th, 2008 by admin
Posted in VC/MFC | No Comments »
1,Credential Provider,怎样通过这个COM来是实现?
2,如何在纯C程序中加入ActiveX界面控件?有简单的实例最好。
3,通过Credential Provider实现登录sample,要能正常登录的啊。
更请有经验的朋友多提供些资料,非常感谢!!yxz_06@126.com
指纹登录我用得最多,IBM笔记本就有,很好使,但是做驱动时必须区分操作系统版本,XP及以前的版本使用的是GINA架构,VISTA开始放弃了GINA,原因在于VISTA把所有用户桌面的session id设置成从1开始,不再跟服务使用相同的session 0,所以winlogon进程也改成了在每个session中都有一个进程副本,GINA不再适用,改成了LogonUI。你必须针对vista系统单独制作指纹登录驱动。
===================================================================================
XP下替换GINA就可以了,这个容易实现.
在VISTA下,现在已经下载了好些例子,都还没有去验证.我的程序是这样的,一个USB指纹扫描器,XP下的驱动(在VISTA下不可用么?),ACTIVEX检测验证指纹扫描器扫描到的指纹.因为要实现域登录,所以在VISTA下的登录也希望像XP一样有一个LOGON对话框,可以选择本地或域登录,这样是不是可行的?在LogonUI中要不要用到HOOK?
微软在拉斯维加斯CES大展上表示,微软最新还未发布的windows vista操作系统将增加针对指纹识别器的支持,同时提供针对来自digital persona的软件兼容支持,这一识别设备将会提供使用微软vista新系统的用户用指纹识别代替密码口令访问和管理vista。
微软表示,对于vista这项新增加的指纹识别支持兼容模块而言,采用这一项新模块的vista将会提供家庭和个人用户更为便利的操作体验,而无需记忆繁琐的密码帐号,特别是在家庭中由父母同时使用的电脑平台尤其如此。
全新针对vista的指纹识别器已经开始供货,预计售价在40美元。
[菜鸟][界面][实现]菜鸟请教高手这个界面怎么实现
09月 15th, 2008 by admin
Posted in VC/MFC | No Comments »
在单文档应用 程序中,要 在客户区的底部显示一个 对话框,该怎么实现?
看这样 做对吗?View类派生自CRichEditView,在资源管理器中编辑一对话框模板,假设ID为ID_Dialog,然后在 CMainFrame
类中 定义 CDialogBar m_wndSend;最后在CMainFrame类的OnCreate函数 中添加如下代码:
if (!m_wndSend.Create(this, ID_Dialog, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, ID_Dialog))
{
TRACE0("Failed to create Dialog bar
");
return -1; // fail to create
}
m_wndSend.EnableDocking(CBRS_ALIGN_BOTTOM);
DockControlBar(&m_wndSend, AFX_IDW_DOCKBAR_BOTTOM);
m_wndSend.SetWindowText(_TEXT("发送窗口"));
哪位大侠指点下啊,谢谢!
[静态][图片][实现]想在一个静态框里放图片,并能实现放大/缩小/拖动,完整源码
09月 15th, 2008 by admin
Posted in VC/MFC | No Comments »
我想在一个静态框里放图片,并能实现图片的放大/缩小/拖动功能,还有就是不能闪烁,我的编程很初级,哪位好心人能帮我一下,单位催,可是拿不出,很头疼那.最好是有完整源码,我刚注册不知道能给多少分
datoue_shi@sina.com,我想用MFC可以吗?
你好,我也正在苦苦寻找这个资料,ding_net@sina.com QQ344120829 谢谢!!
[100分][悬赏][实现]100分悬赏C++实现的windows下VPN源码
09月 7th, 2008 by admin
Posted in VC/MFC | No Comments »
小弟最近遍寻资料,但暂时只知原理大致如何,实现还有问题。
由于时间关系,所以来此询问。其实不一定要源码,关键地方的实现提点下可也(不要只理论,谢谢)
annvily2005@yahoo.com.cn
源码没有,不过可以给你提供一个思路:
需要驱动,虚拟一个网络适配器,和你的物理网卡桥接(也可以不虚拟网络适配器,直接做一个网络适配的filter驱动),然后在驱动里过滤特定ip段的包,就是你要vpn的专网ip段,属于这个ip段的就封装成vpn指定的格式发给vpn公网网关,也就是封装后透给物理网卡的驱动继续处理,不是的直接透给物理网卡的驱动继续处理。收到vpn公网网关来的包则解封装,然后透给上层程序。
对上层程序来说这一切都是透明的
up
通过查找相关资料,我当然知道那些实现的源码要获取的话是不易的。所以我才说关键地方提点下
感谢ls,结贴后给分。
VPN服务器的编写确实不懂,现在暂时有几个问题不明了:
1.VPN的服务是否是通过修改注册表等开启。因为经常看到通过配置系统来实现VPN的,所以有这个想法。
2.关于使用隧道技术:既然在服务器形成IP映射,那么这样点到点之间的通讯不都得通过服务器转发,那样对服务器负担不是加大了。如果这样的话,用STUN不是更好
3.VPN构建VLAN,要让同一VLAN的用户相互知道对方,那服务器的发送频率跟发送量不是很大,通常怎么处理来避免
刚找到一些linux下开源的代码,看看先。
openvpn就是个开源的,但坦白说,openvpn的质量和性能和windows服务器本身带的VPN服务功能根本不是同一个级别的,只不过openvpn是开源的,也可以在linux中用,所以还是不少人在用罢.也说一句,开源的东西的源代码,实在太难看得懂了,代码基本上不规则的,而且说明少得可怜,这样的代码如果在软件工程中的课,肯定是0分的.
openvpn的代码看的人晕。。。
VPN客户端代码是花钱买的。。。。3000RMB。汗
直接用ras好了,都是现成的api函数,查找资料方便,
开源工程,OpenVPN,你自已去看看,写得不错
VNP不是开源的吗?
哦,是VPN,我看成VNP了,不好意思。
[实现][类似][Mircrosoft]急!!怎么样用vc实现类似Mircrosoft word类似的选择字体颜色字体加粗等功能
09月 6th, 2008 by admin
Posted in VC/MFC | No Comments »
就是建一个单文档应用程序,我可以在文档内输入文字,更改文字格式,改变字体颜色,加粗字体,文字居中等。是不是应该用CRichEditView类啊???
万分感谢。
可能用CRichEditView,但更改字体格式颜色等还需要自己代码控制
我最后要按照指定的格式编辑通告信息,并生成特殊格式的文件。例如,我输入abcd,然后我把abcd变成红色abcd,要求用0×03指定颜色,0×00 为转义代码,最终要输出00 03 01 00 FF 00 00 (abcd的十六进制),这又该怎么实现呢,实在是毫无头绪。
msdn的smaple里面有个例子..
显然要自己控制啊,机器怎么知道你想要什么字体和颜色?
除了用CRichEditView作为基类,还有比这个更简便的方法吗?
[30分][vc6.0][实现] 急急~~30分 vc6.0 如何实现文件中的dib转换成jpg ,并另存为 进者有分
09月 4th, 2008 by admin
Posted in VC/MFC | No Comments »
路过大侠,帮忙解决下,不胜感激!!
如果是MFC的话,直接用CImage类可以很方便的完成转存:
CImage myImage;
myImage.Load("c:\my.bmp");
myImage.Save("C:\my.jpg", ImageFormatJPEG);
它还可以支持GIF, PNG格式.
FreeImage也可以
//打开驱动
FreeImage_Initialise(TRUE);
//打开影像
FIBITMAP *bmp = FreeImage_Load(FIF_TIFF,"lena_std.tif",TIFF_CMYK);
//另存
if(FreeImage_Save(FIF_BMP, bmp, "lena_std.bmp", 0))
//关闭驱动
FreeImage_DeInitialise();
我写的那个动态链接库也可以用的
JPEG图像是有不同版本的。
[按钮][实现][Vista]按钮实现像Vista的效果
09月 2nd, 2008 by admin
Posted in VC/MFC | No Comments »
自定义button,要求是要实现像VISTA按钮的那种一样,鼠标在按钮区域的时候按钮就亮了,用GDI+实现这个效果,我尝试过用路径渐变话刷做的,但是效果很差,因为按钮的颜色不同画刷的颜色我也没办法确定,做出来后按钮的颜色不同那种点亮的效果也就很差,最后我尝试这用颜色矩阵做,做出来是按钮变亮了,但是是全部button区域都变亮了,像白色那种亮,感觉效果还是不好,问题是始终想不通人家那个按钮效果是咋样弄出来的
大多数都是用贴图来实现的,楼主可以参考下ButtonXP、CButtonST等自绘按钮的做法。
纯粹靠代码来实现按钮的明亮和灰暗,效果很不好
codeproject上 有一个C#的
用GDI+画出来的, 其实只要颜色啊 样式啊控制好了 就可以画出来了
再有就是按钮的形状了, 因为不是规则的矩形, 你可以自己创建HRGN来实现不规则的按钮
贴图是最简单的方法,不过这种方法依赖于外部资源,
恩,谢谢大家的指点,我也和我们领导谈了换图片,结果。。。谢谢大家
没给分的2位别生气。。。我分不够了,就给前面的先给了。。。你们的分有了后一定给你们补上
[实现][屏蔽][之类]如何实现屏蔽F1之类的功能键,并且按退格键可删除
09月 1st, 2008 by admin
Posted in VC/MFC | No Comments »
#include <stdio.h>
#include <conio.h>
void main()
{
int key;
char str[6];
printf("Please input Sno:");
for(key=0;key <=5;key++)
{ str[key]=getche();
if (str[key]=='
') //换行
break;
for (;str[key]=='0xe0';) //屏蔽 a
{printf(" ");
str[key]=getche();
}
}
}
/* 如何实现屏蔽F1之类的功能键,并且按退格键可删除???
好象说'0xe0'是功能键int类型的高八位,具体要怎么操作呢???
请大家帮帮忙*/