336 lines
7.7 KiB
C++
336 lines
7.7 KiB
C++
#define _COMMON_USENLS_
|
|
#include <common/windows.hpp>
|
|
#include <common/block.hpp>
|
|
#include <common/openfile.hpp>
|
|
#include <common/console.hpp>
|
|
#include <common/block.hpp>
|
|
#include <com/com.hpp>
|
|
|
|
#include <olectl.h>
|
|
#include <com/objbase.hpp>
|
|
#include <com/oleauto.hpp>
|
|
#include <com/com.hpp>
|
|
#include <com/variant.hpp>
|
|
|
|
#include <boneyard/dimg.h>
|
|
|
|
|
|
class FunctionDescription : private FUNCDESC
|
|
{
|
|
public:
|
|
FunctionDescription(void);
|
|
FunctionDescription(const FunctionDescription &someFunctionDescription);
|
|
FunctionDescription(const FUNCDESC &someFUNCDESC);
|
|
virtual ~FunctionDescription();
|
|
FunctionDescription &operator=(const FunctionDescription &someFunctionDescription);
|
|
FunctionDescription &operator=(const FUNCDESC &someFUNCDESC);
|
|
MEMBERID memberID(void)const;
|
|
void memberID(MEMBERID memberID);
|
|
SCODE *ptrSCode(void)const;
|
|
void ptrSCode(SCODE *ptrSCode);
|
|
ELEMDESC *ptrELEMDESC(void)const;
|
|
void ptrELEMDESC(ELEMDESC *ptrELEMDESC);
|
|
FUNCKIND funcKind(void)const;
|
|
void funcKind(FUNCKIND funcKind);
|
|
INVOKEKIND invocation(void)const;
|
|
void invocation(INVOKEKIND invocation);
|
|
CALLCONV convention(void)const;
|
|
void convention(CALLCONV convention);
|
|
short parameters(void)const;
|
|
void parameters(short parameters);
|
|
short optionalParameters(void)const;
|
|
void optionalParameters(short optionalParameters);
|
|
short vtableOffset(void)const;
|
|
void vtableOffset(short vtableOffset);
|
|
short countSCodes(void)const;
|
|
void countSCodes(short countSCodes);
|
|
ELEMDESC returnType(void)const;
|
|
void returnType(ELEMDESC returnType);
|
|
WORD funcFlags(void)const;
|
|
void funcFlags(WORD funcFlags);
|
|
FUNCDESC &getFUNCDESC(void);
|
|
private:
|
|
void zeroInit(void);
|
|
};
|
|
|
|
inline
|
|
FunctionDescription::FunctionDescription(void)
|
|
{
|
|
zeroInit();
|
|
}
|
|
|
|
inline
|
|
FunctionDescription::FunctionDescription(const FunctionDescription &someFunctionDescription)
|
|
{
|
|
*this=someFunctionDescription;
|
|
}
|
|
|
|
inline
|
|
FunctionDescription::FunctionDescription(const FUNCDESC &someFUNCDESC)
|
|
{
|
|
*this=someFUNCDESC;
|
|
}
|
|
|
|
inline
|
|
FunctionDescription::~FunctionDescription()
|
|
{
|
|
}
|
|
|
|
inline
|
|
FunctionDescription &FunctionDescription::operator=(const FunctionDescription &someFunctionDescription)
|
|
{
|
|
memberID(someFunctionDescription.memberID());
|
|
ptrSCode(someFunctionDescription.ptrSCode());
|
|
ptrELEMDESC(someFunctionDescription.ptrELEMDESC());
|
|
funcKind(someFunctionDescription.funcKind());
|
|
invocation(someFunctionDescription.invocation());
|
|
convention(someFunctionDescription.convention());
|
|
parameters(someFunctionDescription.parameters());
|
|
optionalParameters(someFunctionDescription.optionalParameters());
|
|
vtableOffset(someFunctionDescription.vtableOffset());
|
|
countSCodes(someFunctionDescription.countSCodes());
|
|
returnType(someFunctionDescription.returnType());
|
|
funcFlags(someFunctionDescription.funcFlags());
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
FunctionDescription &FunctionDescription::operator=(const FUNCDESC &someFUNCDESC)
|
|
{
|
|
FUNCDESC::memid=someFUNCDESC.memid;
|
|
FUNCDESC::lprgscode=someFUNCDESC.lprgscode;
|
|
FUNCDESC::lprgelemdescParam=someFUNCDESC.lprgelemdescParam;
|
|
FUNCDESC::funckind=someFUNCDESC.funckind;
|
|
FUNCDESC::invkind=someFUNCDESC.invkind;
|
|
FUNCDESC::callconv=someFUNCDESC.callconv;
|
|
FUNCDESC::cParams=someFUNCDESC.cParams;
|
|
FUNCDESC::cParamsOpt=someFUNCDESC.cParamsOpt;
|
|
FUNCDESC::oVft=someFUNCDESC.oVft;
|
|
FUNCDESC::cScodes=someFUNCDESC.cScodes;
|
|
FUNCDESC::elemdescFunc=someFUNCDESC.elemdescFunc;
|
|
FUNCDESC::wFuncFlags=someFUNCDESC.wFuncFlags;
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
MEMBERID FunctionDescription::memberID(void)const
|
|
{
|
|
return FUNCDESC::memid;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::memberID(MEMBERID memberID)
|
|
{
|
|
FUNCDESC::memid=memberID;
|
|
}
|
|
|
|
inline
|
|
SCODE *FunctionDescription::ptrSCode(void)const
|
|
{
|
|
return FUNCDESC::lprgscode;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::ptrSCode(SCODE *pSCode)
|
|
{
|
|
FUNCDESC::lprgscode=pSCode;
|
|
}
|
|
|
|
inline
|
|
ELEMDESC *FunctionDescription::ptrELEMDESC(void)const
|
|
{
|
|
return FUNCDESC::lprgelemdescParam;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::ptrELEMDESC(ELEMDESC *ptrELEMDESC)
|
|
{
|
|
FUNCDESC::lprgelemdescParam=ptrELEMDESC;
|
|
}
|
|
|
|
inline
|
|
FUNCKIND FunctionDescription::funcKind(void)const
|
|
{
|
|
return FUNCDESC::funckind;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::funcKind(FUNCKIND funcKind)
|
|
{
|
|
FUNCDESC::funckind=funcKind;
|
|
}
|
|
|
|
inline
|
|
INVOKEKIND FunctionDescription::invocation(void)const
|
|
{
|
|
return FUNCDESC::invkind;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::invocation(INVOKEKIND invocation)
|
|
{
|
|
FUNCDESC::invkind=invocation;
|
|
}
|
|
|
|
inline
|
|
CALLCONV FunctionDescription::convention(void)const
|
|
{
|
|
return FUNCDESC::callconv;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::convention(CALLCONV convention)
|
|
{
|
|
FUNCDESC::callconv=convention;
|
|
}
|
|
|
|
inline
|
|
short FunctionDescription::parameters(void)const
|
|
{
|
|
return FUNCDESC::cParams;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::parameters(short parameters)
|
|
{
|
|
FUNCDESC::cParams=parameters;
|
|
}
|
|
|
|
inline
|
|
short FunctionDescription::optionalParameters(void)const
|
|
{
|
|
return FUNCDESC::cParamsOpt;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::optionalParameters(short optionalParameters)
|
|
{
|
|
FUNCDESC::cParamsOpt=optionalParameters;
|
|
}
|
|
|
|
inline
|
|
short FunctionDescription::vtableOffset(void)const
|
|
{
|
|
return FUNCDESC::oVft;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::vtableOffset(short vtableOffset)
|
|
{
|
|
FUNCDESC::oVft=vtableOffset;
|
|
}
|
|
|
|
inline
|
|
short FunctionDescription::countSCodes(void)const
|
|
{
|
|
return FUNCDESC::cScodes;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::countSCodes(short countSCodes)
|
|
{
|
|
FUNCDESC::cScodes=countSCodes;
|
|
}
|
|
|
|
inline
|
|
ELEMDESC FunctionDescription::returnType(void)const
|
|
{
|
|
return FUNCDESC::elemdescFunc;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::returnType(ELEMDESC returnType)
|
|
{
|
|
FUNCDESC::elemdescFunc=returnType;
|
|
}
|
|
|
|
inline
|
|
WORD FunctionDescription::funcFlags(void)const
|
|
{
|
|
return FUNCDESC::wFuncFlags;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::funcFlags(WORD funcFlags)
|
|
{
|
|
FUNCDESC::wFuncFlags=funcFlags;
|
|
}
|
|
|
|
inline
|
|
FUNCDESC &FunctionDescription::getFUNCDESC(void)
|
|
{
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
void FunctionDescription::zeroInit(void)
|
|
{
|
|
::memset(&getFUNCDESC(),0,sizeof(FUNCDESC));
|
|
}
|
|
|
|
|
|
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/)
|
|
{
|
|
FunctionDescription fundDesc;
|
|
Block<String> strMethodNames;
|
|
SmartPointer<IUnknown> ppInterface;
|
|
ITypeInfo *pTypeInfo;
|
|
_DImgScan *pImageScanner;
|
|
ComResult comResult;
|
|
HRESULT result;
|
|
EXCEPINFO excpInfo;
|
|
|
|
ComObj comObj;
|
|
comObj.createInstance(CLSID_ImgScan,DIID__DImgScan,ppInterface,InprocServer);
|
|
pImageScanner=(_DImgScan*)(IUnknown*)ppInterface;
|
|
|
|
UINT count(0);
|
|
pImageScanner->GetTypeInfoCount(&count);
|
|
comResult=pImageScanner->GetTypeInfo(0,::GetUserDefaultLCID(),&pTypeInfo);
|
|
if(!comResult.success()){pImageScanner->Release();return 0;}
|
|
|
|
BSTR bstrName;
|
|
BSTR bstrDocString;
|
|
unsigned long helpContext;
|
|
BSTR bstrHelpFile;
|
|
|
|
int index=1;
|
|
while(true)
|
|
{
|
|
comResult=pTypeInfo->GetDocumentation(index++,&bstrName,&bstrDocString,&helpContext,&bstrHelpFile);
|
|
if(!comResult.success())break;
|
|
String strAnsiName(BString(bstrName).toString());
|
|
String strAnsiDocString(BString(bstrDocString).toString());
|
|
String strHelpFile(BString(bstrHelpFile).toString());
|
|
strMethodNames.insert(&strAnsiName);
|
|
::OutputDebugString(strAnsiName+String(";")+strAnsiDocString+String(";")+strHelpFile+String(";")+String("\n"));
|
|
}
|
|
|
|
Variant varResult;
|
|
unsigned int argErrorIndex;
|
|
comResult=pImageScanner->Invoke(0x64,IID_NULL,::GetUserDefaultLCID(),DISPATCH_METHOD,0,&varResult.getVARIANT(),&excpInfo,&argErrorIndex);
|
|
if(!comResult.success())
|
|
{
|
|
result=comResult.error();
|
|
pTypeInfo->Release();
|
|
pImageScanner->Release();
|
|
return 0;
|
|
}
|
|
|
|
comResult=pImageScanner->Invoke(0x67,IID_NULL,::GetUserDefaultLCID(),DISPATCH_METHOD,0,&varResult.getVARIANT(),0,&argErrorIndex);
|
|
if(!comResult.success())
|
|
{
|
|
result=comResult.error();
|
|
pTypeInfo->Release();
|
|
pImageScanner->Release();
|
|
return 0;
|
|
}
|
|
|
|
|
|
pTypeInfo->Release();
|
|
pImageScanner->Release();
|
|
return 0;
|
|
}
|
|
|
|
|