免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4356 | 回复: 9
打印 上一主题 下一主题

怎么用C语言来调用COM中的函数呢?求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-28 10:20 |只看该作者 |倒序浏览
现在有一个VB写的com组件,已经编译成dll(hh.dll),用VB调用了dll中的函数已经成功,现在我需要用C语言调用该dll中的函数,但是,由于这是第一次这么做,我试着去做,没有成功,特来请教。用VB调用dll中函数如下:


Dim objUMU
Dim strHash
Dim strURL

Set objUMU = CreateObject("UMU.UrlGenerator")

strHash = InputBox("请输入散列值:", "输入 Hash(40个字节) 值", "444f50950256e66f128d528d0773fdefbc298cce")
If Len(strHash) <> 40 Then
        WScript.Quit
End If

strURL = "info_hash=" & strHash & "&key=" & objUMU.GenBitCometTorrentKey(strHash)
Set objUMU = Nothing

If Not IsEmpty(InputBox("生成的结果如下:", "结果", strURL)) Then
        Dim objWSH

        Set objWSH = CreateObject("Wscript.Shell")
        objWSH.Run strURL
        Set objWSH = Nothing
End If

请帮帮忙,谢谢。。。。

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
2 [报告]
发表于 2012-04-28 10:46 |只看该作者
我是这样想的:用VB编写的COM,通过脚本调用成功了,说明COM中已经实现了DISPATCH调度接口;
你现在用C调用COM,那么该COM就不要实现DISPATCH调度接口;这里涉及到数据存储单元的问题;C语言中的字符是标准的ANSI C,而VB中的字符存储形式是UNICODE;

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2012-04-28 10:59 |只看该作者
用VC,类似

#import "hh.dll" no_namespace named_guids
CComPtr<IUrlGenerator>        UrlGenerator;

UrlGenerator.CoCreateInstance(CLSID_UrlGenerator, NULL, CLSCTX_INPROC_SERVER);

反正用ATL就比较简单了

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2012-04-28 11:16 |只看该作者
你不能助纣为虐,你应该明确的告知对方:“对不起,COM是私有垃圾技术,C语言无法调用”

如果你的老板逼着你,那么
与其苦逼的直连COM和C,不如用其它VC++将这个COM封装一下,提供一个标准的DLL接口给你

论坛徽章:
0
5 [报告]
发表于 2012-04-28 11:40 |只看该作者
我用c语言调用dll里面的函数,没有成功。。。回复 2# 光速


   

论坛徽章:
0
6
发表于 2012-04-28 11:42
呵呵,是的,但是,没有办法啊,因为需要dll中的函数计算一个值key,com已经弄成dll了,因为计算key值必须要使用里面的函数,我不知道该函数是怎么实现的。所以,不得已而为之。。。您会嘛?交交我吧。。回复 4# bruceteen


   

论坛徽章:
5
未羊
日期:2014-08-07 15:42:10双子座
日期:2014-09-23 15:42:172015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:55:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
7 [报告]
发表于 2012-04-28 11:43 |只看该作者
回复 5# 梦醒潇湘love

vb里面的字符类型:BSTR
C语言中的字符类型:char
字符的存储格式不一样,会出问题的;

   

论坛徽章:
0
8 [报告]
发表于 2012-04-28 11:44 |只看该作者
用Vb写的com,然后编译成dll了,我想调用里面的函数计算key,但是,这是我第一次做,不会,能不能具体点。。回复 3# hellioncu


   

论坛徽章:
0
9
发表于 2012-04-28 11:45
对啊,我查资料时,也看到了这个问题,我不知道怎么办,所以来cu发帖请教下了。。这个有没有办法呢??回复 7# 光速


   

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
10 [报告]
发表于 2012-04-29 13:17 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP