c++ builder 如何调用COM?

牧牛人软件 2013-10-17 10:00:16
以下是vbs代码:
Set hsClient = CreateObject("HSIrm.HSIrmClient")
'对密码进行加密
EnPassword = hsClient.EncryptPassword("my", "w21WrtX")
'进行用户认证
RetCode = hsClient.Init("my", EnPassword, 1)
if RetCode <> 0 then
Descr = hsClient.GetDescriptionByCode(RetCode)
MsgBox "初始化失败, Code: " & RetCode & "---" & Descr
else
MsgBox "初始化成功"
end if
---------------------------------
想模仿vb用c++ builder来实现
vb中的:Set hsClient = CreateObject("HSIrm.HSIrmClient")
可以用c++ builder:Variant hsClient = Variant::CreateObject("HSIrm.HSIrmClient")代替
其他的hsClient.EncryptPassword、hsClient.Init没法做,Variant没有这样的方法。
请各位老师支持,谢谢!

...全文
361 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
学习一下
牧牛人软件 2013-10-18
  • 打赏
  • 举报
回复
其他基本可以了,错误信息Descr.pcVal不对,试了其他的属性页不对
ccrun.com 2013-10-17
  • 打赏
  • 举报
回复
大概可能是这样,个别术语不清楚到底是方法还是属性,自己揣摸。
Variant hsClient = CreateOleObject("HSIrm.HSIrmClient");

Variant EnPassword = hsClient.OleFunction("EncryptPassword", "my", "w21WrtX");

Variant RetCode = hsClient.OleFunction("my", EnPassword, 1);

if (RetCode.intVal)
{
    Variant Descr = hsClient.OleFunction("GetDescriptionByCode", RetCode);
    ShowMessage(String().sprintf(TEXT("初始化失败, Code: %d --- %s"),
        RetCode.intVal, Descr.pcVal));
}
else 
   ShowMessage("初始化成功");
纯手工输入,未做任何测试。
牧牛人软件 2013-10-17
  • 打赏
  • 举报
回复
是的,明天再试
ccrun.com 2013-10-17
  • 打赏
  • 举报
回复
RetCode = hsClient.OleFunction("MakeDSMFile",irmFileHeader, "c:\temp\aa.doc", "c:\temp\aa.doc.dsm", perMissionList, "From com", ""); 这个至少要改成: RetCode = hsClient.OleFunction("MakeDSMFile",irmFileHeader, "c:\\temp\\aa.doc", "c:\\temp\\aa.doc.dsm", perMissionList, "From com", ""); 再试。 联系上下文,变量应该都定义成Variant类型。
牧牛人软件 2013-10-17
  • 打赏
  • 举报
回复
以上红色部分不知道C++如何写?我写的不正确
牧牛人软件 2013-10-17
  • 打赏
  • 举报
回复
妖哥给的代码基本搞定,就是错误信息Descr.pcVal不对。 前面只是部分代码,我还有以下代码不知道C++如何写 '将权限加入到链表中 Set perMissionList = CreateObject("HSIrm.HSIrmPermissionList") perMissionList.AddPermission permission0 perMissionList.AddPermission permission1 '制作加密文档, Set irmFileHeader = CreateObject("HSIrm.HSIrmFileHeader") RetCode = hsClient.MakeDSMFile(irmFileHeader, "c:\temp\aa.doc", "c:\temp\aa.doc.dsm", perMissionList, "From com", "") ================================================================= 全部的VB代码: Set hsClient = CreateObject("HSIrm.HSIrmClient") '对密码进行加密 EnPassword = hsClient.EncryptPassword("my", "wsj87pp1") '进行用户认证 RetCode = hsClient.Init("my", EnPassword, 2) if RetCode <> 0 then Descr = hsClient.GetDescriptionByCode(RetCode) MsgBox "初始化失败, Code: " & RetCode & "---" & Descr & "---" & EnPassword else MsgBox "初始化成功" end if '加入作者权限 Set permission0 = CreateObject("HSIrm.HSIrmPermission") permission0.ObjUUID="" permission0.ObjType="U" permission0.ObjName="" permission0.ObjID="my" permission0.Permission="A" '加入读者的权限 Set permission1 = CreateObject("HSIrm.HSIrmPermission") permission1.ObjUUID="" permission1.ObjType="U" permission1.ObjName="" permission1.ObjID="my" permission1.Permission="A" '将权限加入到链表中 Set perMissionList = CreateObject("HSIrm.HSIrmPermissionList") perMissionList.AddPermission permission0 perMissionList.AddPermission permission1 '制作加密文档,最后一个参数为部门的UUID Set irmFileHeader = CreateObject("HSIrm.HSIrmFileHeader") RetCode = hsClient.MakeDSMFile(irmFileHeader, "c:\temp\aa.doc", "c:\temp\aa.doc.dsm", perMissionList, "From com", "") if RetCode <> 0 then Descr = hsClient.GetDescriptionByCode(RetCode) MsgBox "加密文档失败, Code: " & RetCode & "---" & Descr else MsgBox "FileID: " & irmFileHeader.FileID & " ServerID: " & irmFileHeader.ServerID & " TimeIndex: " & irmFileHeader.TimeIndex MsgBox "加密文档成功" end if Set irmFileHeader1 = CreateObject("HSIrm.HSIrmFileHeader") RetCode = hsClient.GetFileHeader("c:\temp\aa.doc.dsm", irmFileHeader1) if RetCode <> 0 then Descr = hsClient.GetDescriptionByCode(RetCode) MsgBox "获取文件头信息失败, Code: " & RetCode & "---" & Descr else MsgBox "FileID: " & irmFileHeader1.FileID & " ServerID: " & irmFileHeader1.ServerID & " TimeIndex: " & irmFileHeader1.TimeIndex MsgBox "获取文件头信息成功" end if ====================================================== bcb++代码: //加入作者权限 Variant permission0 = Variant::CreateObject("HSIrm.HSIrmPermission"); permission0.OlePropertySet("ObjUUID",""); permission0.OlePropertySet("ObjType","U"); permission0.OlePropertySet("ObjName",""); permission0.OlePropertySet("ObjID","my"); permission0.OlePropertySet("Permission","A"); //加入读者的权限 Variant permission1 = Variant::CreateObject("HSIrm.HSIrmPermission"); permission1.OlePropertySet("ObjUUID",""); permission1.OlePropertySet("ObjType","U"); permission1.OlePropertySet("ObjName",""); permission1.OlePropertySet("ObjID","my"); permission1.OlePropertySet("Permission","A"); //将权限加入到链表中 Variant perMissionList = Variant::CreateObject("HSIrm.HSIrmPermissionList"); perMissionList.OleFunction("AddPermission", permission0); perMissionList.OleFunction("AddPermission", permission1); //制作加密文档,最后一个参数为部门的UUID Variant irmFileHeader = Variant::CreateObject("HSIrm.HSIrmFileHeader"); RetCode = hsClient.OleFunction("MakeDSMFile",irmFileHeader, "c:\temp\aa.doc", "c:\temp\aa.doc.dsm", perMissionList, "From com", ""); if(RetCode.intVal){ Descr = hsClient.OleFunction("GetDescriptionByCode", RetCode); ShowMessage(String().sprintf(TEXT("加密文档失败, Code: %d --- %s"), RetCode.intVal, Descr.pcVal)); } else ShowMessage(String().sprintf(TEXT("加密文档成功, FileID: %s ServerID: %s TimeIndex: %d"), irmFileHeader.OlePropertyGet("FileID"), irmFileHeader.OlePropertyGet("ServerID"), irmFileHeader.OlePropertyGet("TimeIndex") ));
牧牛人软件 2013-10-17
  • 打赏
  • 举报
回复
做内部非现场审计,10年前开发了做模型(SQL)的程序供大家使用,一直用到现在。 现在信息安全重要,所以要求用华为的DSM加密,简单的说“数据离开公司的系统就无法阅读”。 提供的VBS代码,我现在要转为bcb。
ccrun.com 2013-10-17
  • 打赏
  • 举报
回复
光红现在主要忙什么呢?
牧牛人软件 2013-10-17
  • 打赏
  • 举报
回复
谢谢妖哥,真好!我去试试,我现在极少写代码了,谢谢您多年来的支持与坚持!

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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