gpt4 book ai didi

interop - 在 C# 中使用 ActiveX PropertyBags

转载 作者:行者123 更新时间:2023-12-01 10:16:26 24 4
gpt4 key购买 nike

我创建了一个带有 ActiveX 界面的 .NET 用户控件。它运作良好。

现在,我希望能够从 ActiveX 接口(interface)的属性包中读取和写入。

我该怎么做?

最佳答案

最简单的方法是使用客户端脚本将参数值传递给 ActiveX

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script language="javascript">

function Rundata(file)
{
var winCtrl = document.getElementById("YourActiveX");
winCtrl.Option1 = file;
winCtrl.WriteToFile();
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<object id="YourActiveX" classid="clsid:6b1bdf22-1c1d-774e-cd9d-1d1aaf7fd88f"
width="300px" height="200px">
<param name="Option1" value="valuetoRetrieve1" />
</object>

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

<asp:Button runat="server" ID="Button1" OnClientClick="javascript:Rundata('valuetoRetrieve2');" />
</div>
</form>
</body>
</html>

如果您不能使用客户端脚本,您可以尝试这样:

假设您要读取一个参数,例如:
<object id="YourActiveX" classid="clsid:6b1bdf22-1c1d-774e-cd9d-1d1aaf7fd88f" 
width="300px" height="200px">
<param name="option1" value="valuetoRetrieve" />
</object>

您需要在项目中公开以下 COM 接口(interface):
[ComImport]
[Guid("55272A00-42CB-11CE-8135-00AA004BB851")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPropertyBag
{
void Write([InAttribute] string propName, [InAttribute] ref Object ptrVar);
void Read([InAttribute] string propName, out Object ptrVar, int errorLog);
}

[ComImport]
[Guid("37D84F60-42CB-11CE-8135-00AA004BB851")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IPersistPropertyBag
{

[PreserveSig]
void InitNew();

[PreserveSig]
void Load(IPropertyBag propertyBag, int errorLog);

[PreserveSig]
void Save(IPropertyBag propertyBag, [InAttribute] bool clearDirty, [InAttribute] bool saveAllProperties);

[PreserveSig]
void GetClassID(out Guid classID);
}

您的 activeX 控件应该实现这些接口(interface)。您需要实现一种方法:
void IPersistPropertyBag.Load(IPropertyBag propertyBag, int errorLog) 
{
object value;
propertyBag.Read("option1", out value, errorLog);
string parameter = (string)value;
}

瞧!参数应等于“valuetoRetrieve”

关于interop - 在 C# 中使用 ActiveX PropertyBags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com