-
-
[分享]如何使用别人的COM组件DLL
-
发表于:
2006-4-9 16:41
6057
-
昨天在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函数,我老是调用不了,有知道的大大指教一下
如有专业术语错误,不要笑话我-_-
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)