首页
社区
课程
招聘
[分享]如何使用别人的COM组件DLL
发表于: 2006-4-9 16:41 6100

[分享]如何使用别人的COM组件DLL

2006-4-9 16:41
6100
昨天在CSDN上看到一段代码,作用是快速的获得某文件夹的大小,用到了系统
文件scrrun.dll,由于代码看起来特别别扭,出于兴趣研究了一下。
发现scrrun.dll是个COM组件来的,用VC提供的Depend工具可以看到,导出函数
有那几个DllRegisterServer,DllUnregsiterServer.... 大致上可以判断为COM编写
的(不能用来完全判断)

正好我想起来某某软件中也有一个这样的DLL(文件名是EGameEncrypt.dll),是用来加密它的程序的,于是拿来做试验。

在VC工程中加入
#include "atlconv.h"   //用来转换UniCode Ansi码
#import "EGameEncrypt.dll" raw_interfaces_only

当你的工程加上#import "EGameEncrypt.dll" raw_interfaces_only 这句后
就会在输出目录下生成一个文件EGameEncrypt.tlh
用VC打开,可以看到接口定义

下边是使用过程
  UpdateData();
  CoInitialize(NULL);   
  {//打开COM
    try
    {   
        //用到名字空间中的IEGameEncrypt,来自这里的定义
        //_COM_SMARTPTR_TYPEDEF(IEGameEncrypt, __uuidof(IEGameEncrypt));
        //没学过COM编程,不知道它为什么都加个Ptr才行
        EGAMEENCRYPTLib::IEGameEncryptPtr GameEncrypt;
                                    //===

        //从IDispatch继承下来的CreateInstance函数
        GameEncrypt.CreateInstance(__uuidof(EGAMEENCRYPTLib::EGameEncrypt));
        if (GameEncrypt == NULL)
          return;   

        wchar_t *dest = NULL;
        USES_CONVERSION;
        dest = new wchar_t[256];
        ZeroMemory(dest, 256);
        GameEncrypt->Encode(A2W(m_enStr), &dest);
        m_deStr = W2A(dest);
        UpdateData(FALSE);
        delete [] dest;
    }
    catch(...)
    {
        AfxMessageBox("出错啦!");
    }
  }
  CoUninitialize();

至于其中还有个IRpiemd160接口,里边有个Hash函数,我老是调用不了,有知道的大大指教一下

如有专业术语错误,不要笑话我-_-

[注意]APP应用上架合规检测服务,协助应用顺利上架!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 250
活跃值: (103)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
有意思。
支持!
顶!
2006-4-9 19:57
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
  这样就偷来了一加解密DLL
2006-4-9 22:09
0
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
请问ViperDodge是不是只有com编写的dll也可以使用#import?
2006-4-9 22:21
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
不是,一般的DLL也可以用#import
2006-4-10 10:57
0
雪    币: 308
活跃值: (362)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
6
com组件有些接口直接用CreateInstance调用不到的.最近也对com感兴趣,呵呵,特别是在汇编中,谁有汇编源码,发点上来,谢谢.
2006-4-10 10:57
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
最初由 layper 发布
com组件有些接口直接用CreateInstance调用不到的.


那个Hash函数就应该属于这样的情况吧,那还有其他什么办法可以使用Hash函数呢?
2006-4-10 11:00
0
雪    币: 308
活跃值: (362)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
8
可能要明确它的接口继承关系,寻找这个接口的指针,调用的原型,具体的我不太了解,我兴趣在汇编里调用com,C++ 不了解.
2006-4-10 11:02
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
那我就用汇编试试,谢谢啦
2006-4-10 11:34
0
游客
登录 | 注册 方可回帖
返回
//