时间:2019-04-01 标签:c#com object can't get ref object values
Posted
技术标签:
【中文标题】时间:2019-04-01 标签:c#com object can\'t get ref object values【英文标题】:c# com object cant get ref object values时间:2019-04-01 标签:c#com object can't get ref object values 【发布时间】:2013-01-26 02:52:00 【问题描述】:我们正在尝试从 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() 内部异常:
欢迎任何想法
【问题讨论】:
糟糕的手册。我猜 byte[] 有 1416 个元素长,或者 int[] 有 354 个元素长。 secubio.com/upload/file/1292045533.pdf如果您无法弄清楚,请致电供应商。 谢谢@HansPassant,我的情况似乎是354; ` 常量 int DATASIZE = 354; //(1404 + 12) / 4;` 【参考方案1】:另一个论坛上的这个question 似乎正在处理相同界面的相同问题。
这只是基于该线程的猜测,但问题似乎是dwEnrollData
参数实际上是一个变体类型(不是托管System.Object
类型)在这种情况下您应该尝试使用System.Runtime.InteropServices.VariantWrapper
将要传递的参数值包装到方法中。
【讨论】:
谢谢@mike,试过了:int glngEnrollData; object var = new System.Runtime.InteropServices.VariantWrapper(glngEnrollData);
,但得到了:Error 1 A field initializer cannot reference the non-static field, method, or property 'enrolldata.Form1.glngEnrollData' F:\enrolldata\Form1.cs 28 72 enrolldata
以上是关于时间:2019-04-01 标签:c#com object can't get ref object values的主要内容,如果未能解决你的问题,请参考以下文章
时间:2019-04-01 标签:c#regexsplitbinarystring
时间:2019-04-01 标签:c#read/editaccdb宏
时间:2019-04-01 标签:c#mongodb database collection find
时间:2019-04-01 标签:c#swagger openapi erronous refs when nested classes