如何用方法返回对象?

Endoresu 2010-12-13 09:49:13
以WINDOWS提供的脚本组件FileSystemObject为例吧

我用CoCreateInstance函数成功返回了一个IFileSystem3接口的指针,IFileSystem3里面有个GetFile方法,只要给出路径就能返回一个IFile接口的指针。可是我调用这个方法后没有返回IFile接口的指针,函数的返回值是(HRESULT)E_INVALIDARG,参数不对。究竟如何调用才能正确返回一个IFile接口的指针呢?



[id(0x0000271c), helpstring("Get file"), helpcontext(0x00214ba6)]
HRESULT GetFile(
[in] BSTR FilePath,
[out, retval] IFile** ppfile);


我的程序在VBScript里的等效语句是:
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("e:\test.htm")
MsgBox f.Name
...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Endoresu 2010-12-13
  • 打赏
  • 举报
回复
郁闷了,刚刚跟踪了一下,参数个数也没有错。搞不懂问题在哪里。到底怎么用方法返回对象。。。
Endoresu 2010-12-13
  • 打赏
  • 举报
回复
思想都一样 谁给个C++的形式的代码也行
ccrun.com 2010-12-13
  • 打赏
  • 举报
回复
晕...汇编写的? 那就不了解了.
Endoresu 2010-12-13
  • 打赏
  • 举报
回复
应该是参数的问题,那个返回值是E_INVALIDARG
我是用汇编写的 汇编传递的参数可能跟C++里面不太一样 路径绝对没错,权限也没问题
问题是我调用非返回对象的方法都行,调用返回对象的方法都不行。。。
ccrun.com 2010-12-13
  • 打赏
  • 举报
回复
首先检查一下文件的路径是否正确, 其次看看有没有权限的问题, 比如Vista/Win7中的UAC可能会影响运行结果.
Endoresu 2010-12-13
  • 打赏
  • 举报
回复
我的方法和2L一样 可是最终返回的*pFile还是为null,hr为E_INVALIDARG
这是怎么回事?
ccrun.com 2010-12-13
  • 打赏
  • 举报
回复
伪代码如下:
IFile *pFile = NULL;
HRESULT hr = fso->GetFile(L"路径", &pFile);
if (SUCCEEDED(hr))
{
// 获取成功
}
else
{
// 获取失败
}
Endoresu 2010-12-13
  • 打赏
  • 举报
回复
我简单写下我的伪代码:
CoInitialize(NULL);
CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,iid,&pFSO);
HRESULT hr = pFSO->GetFile(L"路径", &pFile);//返回的pFile居然是NULL
MessageBoxW(NULL,pFile->Name,....(以下略)

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧