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が処理されませんでした
HResult =-2147352571
メッセージ=Türuyuşmazlığı。(HRESULTからの例外:0x80020005(DISP_E_TYPEMISMATCH))
Source = mscorlib
ErrorCode = -2147352571
スタックトレース:
   System.RuntimeType.ForwardCallToInvokeMember(String memberName、BindingFlags flags、Object target、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)
   enrolldata.Form1.button2_Click(Object sender、EventArgs e)in f:\ enrolldata \ Form1.cs:line 196
   System.Windows.Forms.Control.OnClick(EventArgs e)で
   System.Windows.Forms.Button.OnClick(EventArgs e)で
   System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)で
   System.Windows.Forms.Control.WmMouseUp(Message&m、MouseButtonsボタン、Int32クリック)
   System.Windows.Forms.Control.WndProc(Message&m)で
   System.Windows.Forms.ButtonBase.WndProc(Message&m)で
   System.Windows.Forms.Button.WndProc(Message&m)で
   System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)で
   System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)で
   System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd、Int32 msg、IntPtr wparam、IntPtr lparam)で
   System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&msg)で
   System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID、Int32 reason、Int32 pvLoopData)で
   System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason、ApplicationContext context)で
   System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32理由、ApplicationContextコンテキスト)で
   System.Windows.Forms.Application.Run(Form mainForm)で
   f:\ enrolldata \ Program.cs:line 19のenrolldata.Program.Main()で
   System.AppDomain._nExecuteAssembly(RuntimeAssemblyアセンブリ、String [] args)で
   System.AppDomain.ExecuteAssembly(String assemblyFile、Evidence assemblySecurity、String [] args)で
   Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()で
   System.Threading.ThreadHelper.ThreadStart_Context(オブジェクト状態)で
   System.Threading.ExecutionContext.RunInternal(ExecutionContext executeContext、ContextCallbackコールバック、オブジェクト状態、ブール値preserveSyncCtx)で
   System.Threading.ExecutionContext.Run(ExecutionContext executeContext、ContextCallbackコールバック、オブジェクト状態、ブール値preserveSyncCtx)で
   System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext、ContextCallbackコールバック、オブジェクト状態)で
   System.Threading.ThreadHelper.ThreadStart()で
  InnerException:

どんなアイデアでも大歓迎です

4

1 に答える 1

1

別のフォーラムでのこの質問は、同じインターフェースで同じ問題を扱っているようです。

これはそのスレッドに基づく推測にすぎませんが、問題はdwEnrollDataパラメーターが実際にはバリアントタイプ(マネージSystem.Objectタイプではない)であることにあるようです。その場合System.Runtime.InteropServices.VariantWrapperは、メソッドに渡すパラメーター値をラップするために使用してみてください。

于 2013-02-11T02:02:05.563 に答える