我们使用的是黄 Jade 签名垫。他们以 ActiveX 控件的形式提供 API,该控件将放在 Winform 控件上。好吧,我们项目的工作方式我们不希望有一个表单(至少不可见)。我们只希望签名 ActiveX 控件在后台获取图像。
static AxSigPlus sig = new AxSIGPLUSLib.AxSigPlus();
public static void Begin()
{
((System.ComponentModel.ISupportInitialize)(sig)).BeginInit();
sig.Name = "sig";
sig.Location = new System.Drawing.Point(0, 0);
sig.Size = new System.Drawing.Size(0, 0);
sig.Enabled = true;
sig.TabletState = 1; //error here
sig.SigCompressionMode = 0;
}
好的,所以我在标记的行收到了一个错误。异常(exception)是
Exception of type 'System.Windows.Forms.AxHost+InvalidActiveXStateException' was thrown.
我该怎么做才能解决这个问题?创建一个新的隐藏窗体并将控件置于其上以使其不可见会更容易吗?
最佳答案
是的,这样不行。 AxHost 包装器需要在可用之前创建其句柄。这要求它是调用 Show() 方法的窗体上的子控件。
您通常会从 ActiveX 控件获得两个互操作包装器,一个包含 AxHost 包装器的 AxBlah.dll 和一个包装 COM 接口(interface)的 Blah.dll。您只需要引用 Blah.dll。这是否有效是一个悬而未决的问题,许多 ActiveX 控件需要一个窗口句柄来处理线程同步。
如果这不奏效,您将需要一个主持人表格。您可以通过将此代码粘贴到表单类中来使其不可见:
protected override void SetVisibleCore(bool value) {
if (!IsHandleCreated) CreateHandle();
value = false;
base.SetVisibleCore(value);
}
您必须调用 Application.Run() 来启动消息循环。
关于c# - 让 ActiveX 控件在没有窗体的情况下工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907438/