【问题标题】:Error with ActiveX and MCVEActiveX 和 MCVE 错误
【发布时间】:2015-08-31 04:13:35
【问题描述】:

在我搜索返回 S_OK 而不是 S_FALSE 的错误时(请参阅我之前的消息),我制作了一个非常小的服务器,只有一个发送 S_FALSE(HResult 类型)的方法,不幸的是我有一个错误小型客户端程序:TestTest.exe 项目已发送异常类 EOleSysError 并带有消息“变量类型无效”(这是指令 Return:=coll.Method 引发错误)。 任何想法? .ridl 服务器代码:

function TTest1.Method: HResult;
begin
  Result:=S_FALSE;
end;

和客户端代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  coll:variant;
  Return:HResult;
begin
  coll:= CreateOLEObject('Project.Test1');
  Return:=coll.Method;
  if Return=S_FALSE then showmessage('OK') else showmessage('ERROR!!!!!!!!!!!!!!!!');
end;

对于完整的问题,我制作了一个 MCVE: 服务器:enter link description here 客户:enter link description here

【问题讨论】:

标签: delphi delphi-xe8


【解决方案1】:

我认为您不需要HRESULT 类型的参数“值”。您可以删除该参数:该方法已经返回HRESULT。如果您想使用参数进行测试,请尝试将 'value' 更改为 BSTR [in] 并在那里传递任何字符串。它应该可以工作。

Return:=coll.Method('place the parameter string here');

干杯

【讨论】:

  • 不幸的是你是假的,如果我删除HResult类型的参数'Value',函数Method就变成了一个过程。我要进行的测试尤其是 HRESULT 类型,因为我的问题在于这个参数。
  • @michastro 我们已经进行了将近两周的调查,但仍然没有 MCVE。为什么不?我打赌你正在导出register 调用约定函数。但是,如果您不显示 MCVE,我们所能做的就是猜测。请相信我,我知道我在说什么。我知道如何解决问题。你制作了一个 MCVE,我们给你一个明确的答案,你快乐地离开。真的就这么简单。
  • 对不起,大卫,但我在 6 天前发布了一个 MCVE,但没有人回答!
  • 我们在问题中需要这个,而不是站外链接
  • @michastro:不,你没有。您首先发布了一个指向异地下载的链接,然后您发布了一个大型代码转储。这些都不是 MCVE - 代码转储几乎不是 *minimal
【解决方案2】:

我不知道你为什么坚持使用HRESULT 来返回值,为什么你不使用参数value, type : long , modifier : in 创建HRESULT METHOD 然后返回你想要的任何东西。

【讨论】:

  • 我别无选择,我想在一个IEnumVariant中测试NextReset的坏返回,所以我想复制这些函数来找出为什么改变了S_FALSE在 S_OK 中。
猜你喜欢
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多