0

我们试图获取从 COM 对象返回的值,函数是:

bool AxSB100BPC.GetEnrollData(int dwMachineNumber,
int dwEnrollNumber,
int dwEMachineNumber,
int dwBackupNumber,
ref int dwMachinePrivilege,
ref object dwEnrollData,
ref int dwPassWord

我们称这个函数为:

vRet = axSB100BPC1.GetEnrollData(mMachineNumber,
                                 vEnrollNumber,
                                 vEMachineNumber,
                                 vFingerNumber,
                                 ref vPrivilege,
                                 ref oglngEnrollData,
                                 ref glngEnrollPData);

问题在于oglngEnrollData哪个是ref object. 它被声明为object oglngEnrollData;

错误是:

System.Runtime.InteropServices.COMException 未处理
H结果=-2147352571
消息=Tür uyuşmazlığı。(来自 HRESULT 的异常:0x80020005 (DISP_E_TYPEMISMATCH))
源=mscorlib
错误代码=-2147352571
堆栈跟踪:
   在 System.RuntimeType.ForwardCallToInvokeMember(字符串成员名称、BindingFlags 标志、对象目标、Int32 [] aWrapperTypes、MessageData 和 msgData)
   在 SB100BPCLib._DSB100BPC.GetEnrollData(Int32 dwMachineNumber, Int32 dwEnrollNumber, Int32 dwEMachineNumber, Int32 dwBackupNumber, Int32& dwMachinePrivilege, Object& dwEnrollData, Int32& dwPassWord)
   在 AxSB100BPCLib.AxSB100BPC.GetEnrollData(Int32 dwMachineNumber, Int32 dwEnrollNumber, Int32 dwEMachineNumber, Int32 dwBackupNumber, Int32& dwMachinePrivilege, Object& dwEnrollData, Int32& dwPassWord)
   在 f:\enrolldata\Form1.cs:line 196 中的enrolldata.Form1.button2_Click(Object sender, EventArgs e)
   在 System.Windows.Forms.Control.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs 事件)
   在 System.Windows.Forms.Control.WmMouseUp(消息和 m,MouseButtons 按钮,Int32 点击)
   在 System.Windows.Forms.Control.WndProc(消息和 m)
   在 System.Windows.Forms.ButtonBase.WndProc(消息和 m)
   在 System.Windows.Forms.Button.WndProc(消息和 m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息和 m)
   在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
   在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(味精和味精)
   在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID,Int32 原因,Int32 pvLoopData)
   在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 原因,ApplicationContext 上下文)
   在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 原因,ApplicationContext 上下文)
   在 System.Windows.Forms.Application.Run(窗体 mainForm)
   在 f:\enrolldata\Program.cs:line 19 中的enrolldata.Program.Main()
   在 System.AppDomain._nExecuteAssembly(RuntimeAssembly 程序集,字符串 [] 参数)
   在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity,String [] args)
   在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
   在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx)
   在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx)
   在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态)
   在 System.Threading.ThreadHelper.ThreadStart()
  内部异常:

欢迎任何想法

4

1 回答 1

1

另一个论坛上的这个问题似乎正在处理相同界面的相同问题。

这只是基于该线程的猜测,但问题似乎是dwEnrollData参数实际上是一个变体类型(不是托管System.Object类型),在这种情况下,您应该尝试使用System.Runtime.InteropServices.VariantWrapper来包装您传递给方法的参数值。

于 2013-02-11T02:02:05.563 回答