首页 新闻 搜索 专区 学院

恳请知道的人帮助下 这个问题困扰我很久了

0
悬赏园豆:100 [待解决问题]

关于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这个

文件名的值   这个问题困扰我很久了 请教下大家

rbllbr的主页 rbllbr | 初学一级 | 园豆:100
提问于:2011-10-23 23:24
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册