关于com组件调用的问题,我想获取鼠标点击某个文件或者同时选择多个文件的文件名 看了网上一些资料
IShellExtInit这个接口可以做到
下面这是一个atl工程部分源码
class ATL_NO_VTABLE CSimpleShlExt :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSimpleShlExt, &CLSID_SimpleShlExt>,
public ISimpleShlExt,
public IShellExtInit//这是自己添加的
{
public:
CSimpleShlExt(){}
DECLARE_REGISTRY_RESOURCEID(IDR_SIMPLESHLEXT)
DECLARE_NOT_AGGREGATABLE(CSimpleShlExt)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CSimpleShlExt)
COM_INTERFACE_ENTRY(ISimpleShlExt)
COM_INTERFACE_ENTRY(IShellExtInit)//这是自己添加的
END_COM_MAP()
// ISimpleShlExt
protected:
TCHAR m_szFile [MAX_PATH];
public:
// IShellExtInit
LPCSTR getFileName;
STDMETHOD(Initialize)(LPCITEMIDLIST pidlFolder, LPDATAOBJECT pdtobj, HKEY hProgID);
STDMETHOD(get_str)(LPCSTR a,LPCSTR *b);//为了测试用的 自己定义了一个get_str方法
};
然后在cpp定义文件中 实现
HRESULT CSimpleShlExt::Initialize ( LPCITEMIDLIST pidlFolder, LPDATAOBJECT pdtobj, HKEY
hProgID )
{
....
....
for( UINT uIndex = 0; uIndex < uCount; uIndex++ )
{
TCHAR szFileName[MAX_PATH] = { 0 };
//获取文件名
::DragQueryFile(hDrop, uIndex, szFileName, (sizeof(szFileName) / sizeof
(TCHAR)) - 1);
//szFileName为文件(夹)名
}
}
szFileName这是获取的文件夹名 现在的问题是 我怎么得到这个文件夹名呢?
我新建了个win32 Console Application 对这个com组件进行调用
下面是调用过程
#include "Debug/demo_SimpleExt.h"
#include "Debug/demo_SimpleExt_i.c"
int main()
{
::CoInitialize(NULL);
HRESULT hr;
ISimpleShlExt* pIntf=NULL;
hr = CoCreateInstance(CLSID_SimpleShlExt, NULL, CLSCTX_SERVER , IID_ISimpleShlExt, (void
**)& pIntf);
if(SUCCEEDED(hr))
{
LPCSTR lp;
pIntf->get_str("aaaa",&lp);
cout<<lp<<endl;
pIntf->Release();
}
::CoUninitialize();
}
得出的结果是可以输出aaaa的 说明调用组件是成功了 但是我不知道如何得到com组件中szFileName这个
文件名的值 这个问题困扰我很久了 请教下大家