使用Delphi和JCL .NET代码通过COM interop传递.NET对象

时间:2014-01-30 00:50:23

标签: c# .net delphi com interop

我基本上是想做:

Passing strongly typed arguments in .NET COM interop

但是使用Delphi和JCL来做到这一点。我承认自己不是一个COM大师并且已经完成了搜索,但是我无法找到我想要做的答案。我有C#:

using System.Runtime.InteropServices;

namespace Example1ClassLibrary
{
    [ComVisible(true)]
    public class Example1
    {
        public Example1Obj AddByObj(Example1Obj Obj)
        {
            var ret = new Example1Obj();
            ret.XVal = AddFunction(Obj.XVal, Obj.YVal);
            ret.YVal = 0;
            return ret;
        }
    }

    [ComVisible(true)]
    public class Example1Obj
    {
        public int XVal;
        public int YVal;
    }
}

和德尔福:

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  Host := TJclClrHost.Create('v4.0.30319');
  Host.Start();
  Obj := Host.DefaultAppDomain.CreateInstance('Example1ClassLibrary', 'Example1ClassLibrary.Example1').UnWrap();
end;

procedure TfrmMain.Button4Click(Sender: TObject);
var
  Pass: OleVariant;
  Ret: OleVariant;
begin
  Pass := Host.DefaultAppDomain.CreateInstance('Example1ClassLibrary', 'Example1ClassLibrary.Example1Obj').UnWrap();
  Pass.XVal := StrToInt(EditX.text);
  Pass.YVal := StrtoInt(EditY.text);
  Ret := Obj.AddByObj(Pass);
  EditResult.Text := Ret.XVal;
end;

当我点击Button4时,我会看到

  

EOleSysError“参数不正确”。

在这一行:

Ret := Obj.AddByObj(Pass);

我正在尝试做什么,如果是的话,我错过了什么。注意:简单类型工作正常,因此实际加载程序集,创建对象,并使用简单类型调用方法效果很好。

0 个答案:

没有答案