【发布时间】:2011-05-26 00:13:58
【问题描述】:
我已经将一个通过 COM Interop 提供的 .Net 类库导入到 Delphi 2007,并且提供了一个 Decimal 数据类型作为 tagDEC 打包记录。如何填写使用此记录类型以便可以使用类库?
提示
编辑
下面是我的 C# 代码,它通过 COM 互操作公开为 ActiveX:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("ClassLibrary.Class1")]
public class Class1
{
[ComVisible(true)]
public string Method1(DateTime pDateTime, int pID, decimal pQty)
{
...........
}
}
我在 PC 上使用 Delphi 注册了 regasm 库,使用以下命令:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe .\ClassLibrary.dll /tlb:ClassLibrary.tlb
在Delphi 2007中,通过Import Component,导入类型库,在代理类中转换为如下方法:
function Method1(pDateTime: TDateTime; pID: Integer; pQty: TDecimal): WideString;
TDecimal 实际上是 packed record 类型的 tagDEC,在 ActiveX 单元中找到。下面是它的语法:
{ from WTYPES.H }
PDecimal = ^TDecimal;
{$EXTERNALSYM tagDEC}
tagDEC = packed record
wReserved: Word;
case Integer of
0: (scale, sign: Byte; Hi32: Longint;
case Integer of
0: (Lo32, Mid32: Longint);
1: (Lo64: LONGLONG));
1: (signscale: Word);
end;
TDecimal = tagDEC;
{$EXTERNALSYM DECIMAL}
DECIMAL = TDecimal;
我的问题是如何填写,以便将十进制值传递给 .Net 类库方法?有辅助功能吗?我没有找到。
再次感谢!
【问题讨论】:
-
目前回答这个问题有点困难。您能否提供更多详细信息。
-
tagDEC打包记录的结构是什么?它来自哪里... RTL?
-
刚刚编辑了包含所有详细信息、C# 和 Delphi 的帖子。太感谢了
标签: .net delphi com com-interop delphi-2007