【发布时间】:2014-04-09 06:22:31
【问题描述】:
我有以下 C# COM 对象:
[ComVisible(true), GuidAttribute("FD87D0EA-1D00-4189-801A-987D5F8ABD2C")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IRegistration
{
string RegisterForm(string server, string database, string username, string password, string catalogId, string date, string AxyaContextFile);
void RegisterFormAcknowledge(string server, string database, string username, string password, long formId, bool isPrinted, string message);
}
当我从 Word 200 调用方法 RegisterFormAcknowledge 时,我得到以下编译异常: 标记为受限的函数或接口,或函数使用不受支持的自动化类型
这是Word宏代码
Set printer = New MyCOMObject.Registration
printer.RegisterFormAcknowledge "test", "test", "test", "test", 12345, False, "CatalogWordTemplate Not Found"
有人知道为什么吗? VB6 不支持长类型? 第一种方法RegisterForm运行良好。
【问题讨论】:
-
public void RegisterFormAcknowledge(string server, string database, string username, string password, long formId, bool isPrinted, string message)
-
我只是将参数“long formId”更改为“int formId”,它可以工作。有谁知道为什么?
-
是的,
long是一个带符号的 64 位 整数,它与自动化不兼容。另一方面,int是一个带符号的 32 位 整数,它是自动化兼容的。 -
那么,如果我想传递一个大于 int.Max 的值,我应该通过字符串传递,并在 C# 代码中解析它?
-
视情况而定。如果没有签名,你可以使用
uint,并且限制大约是Int32.MaxValue的两倍,即UInt32.MaxValue。