createoleobject('excel.application')报错, eolesyserror 不支持此接口(200)

  • 主题发起人 主题发起人 qdlover
  • 开始时间 开始时间
Q

qdlover

Unregistered / Unconfirmed
GUEST, unregistred user!
纠结的问题,在网上查了很久,也只碰到有人遇到类似的问题,但是没有任何解决方法。也找过微软的技术支持,最后研究半天,给出了答复是“由于这个不是微软产品报出来的错误,所以我们的案例库中没有记载这样的错误信息。另外vbs脚本调用Excel应用程序对象正常,所以严格来说这个问题超出了我们能够支持的范围。我会帮您继续在Internet上继续搜索这个报错,但是多数论坛没有这方面的专家进行支持所以这个报错问题通常都没有解决。”因为程序用了很多年了,最近突然开始陆陆续续有用户(不是一个单位,是不同单位的用户都有这个问题)反映导入excle报错,后来我们看了一下,就是在调用createoleobject('excel.application') 报错了提示"不支持此接口"(说没装office的就不用关注这个问题了)全部的错误提示为“Project test_excel.exe raised exception class EOleSysError with message '不支持此接口',Process stopped,Use step or Run to continue”而且客户机器上的excel是可以正常打开的,而且用vbscript的createobject("excel.application")是可以调用excel的,就是delphi的不行。也重装或者修复过office,都没用,重装系统没试过,就算可以我也不可能给全部出问题的用户都重装系统啊。最纠结的是,本来这些客户都用的好好的,突然有一个月就开始说这个功能有问题了,也不知道是什么问题导致的,也不知道怎么解决。delphi现在没落了,不知道这个问题还可不可能解决啊
 
我们公司都用了7、8年了,从来没碰到过啊!!!是不是注册表有问题了???!!!导致不能进行COM调用了??
 
我们也是用了7,8年了啊,就今年下半年开始,陆续有单位这样了,快郁闷死了,刚才又多了两家单位了
 
有可能是安装了微软补丁的问题
 
唉,不知道了,微软让我去找borland的技术支持,问题是我们用的是盗版啊
 
应该跟Borland没多大关系。
 
问题解决不了啊微软的说不知道delphi的createoleobject是什么机制如果是vc,vb,.net的问题他们可以支持createoleobject到底是什么机制的啊?怎么会和vb的createobject结果不一样啊?调用的是windows api吗??一直是只知道用,不知道什么意思
 
qq群23981160 delphi世界欢迎你
 
基本上就是相关Office补丁的问题,可能性80%,你好好查查
 
实在不行的话你可以用vb或vc等把这个导入或导出Excel的方法编成一个dll,然后调用即可
 
to szhcracker:只能查补丁了,因为是几年前的程序了,就算想改,都找不到源代码了好郁闷的事情啊
 
unit ComObj;function CreateOleObject(const ClassName: string): IDispatch;var ClassID: TCLSID;begin ClassID := ProgIDToClassID(ClassName); OleCheck(CoCreateInstance(ClassID, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IDispatch, Result));end;function ProgIDToClassID(const ProgID: string): TGUID;begin OleCheck(CLSIDFromProgID(PWideChar(WideString(ProgID)), Result));end;unit ActiveX;{$EXTERNALSYM CLSIDFromProgID}function CLSIDFromProgID(pszProgID: POleStr; out clsid: TCLSID): HResult; stdcall;function CLSIDFromProgID; external ole32 name 'CLSIDFromProgID';ole32 = 'ole32.dll';procedure OleCheck(Result: HResult);begin if not Succeeded(Result) then OleError(Result);end;function Succeeded(Res: HResult): Boolean;begin Result := Res and $80000000 = 0;end;procedure OleError(ErrorCode: HResult);begin raise EOleSysError.Create('', ErrorCode, 0);end;可是无法断点跟到CreateOleObject里面去啊
 
基本上已经和Delphi没什么关系了,要么微软继续打补丁,否则难弄。
 
后退
顶部