我基本上是想做:
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);
我正在尝试做什么,如果是的话,我错过了什么。注意:简单类型工作正常,因此实际加载程序集,创建对象,并使用简单类型调用方法效果很好。