“灾难性failure"当从c#访问OCX库时
本文关键字:灾难性 访问 库时 当从 OCX failure quot | 更新日期: 2023-09-27 17:50:18
我目前正在尝试使用第三方DLL从我的c#应用程序。我已经注册了DLL并将其添加为COM组件列表中的参考。据我所知,这应该创建必要的互操作类,以便从c#访问此DLL。
在尝试从DLL内调用任何方法时,我得到以下异常:-
System.Runtime.InteropServices.COMException was unhandled
Message=Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
Source=mscorlib
ErrorCode=-2147418113
StackTrace:
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at OCXDLL._OCXDLL.MyMethod(Int32 param0, String param1, String param2, String param3, Int32 param4)
at MyApplication.Program.Main(String[] args) in C:'MyApplication'Program.cs:line 29
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
和我用来调用库的代码:-
using OCXDLL;
namespace MyApplication
{
class Program
{
static void Main(string[] args)
{
OCXDLL libObj = new OCXDLL();
libObj.MyMethod(....);
}
}
}
请注意,这不是一个ActiveX控件(我已经看到了一些解决这个问题的解决方案)。
有谁知道我哪里做错了吗?谢谢
为我解决!
我有同样的问题大约两个星期!!
我试图在c#中从ocx创建一个实例。对象被成功创建,但我无法调用它的方法,并出现了该死的灾难性异常。
xPKTBLib.xPKTB p = new xPKTBLib.xPKTB()
正如你所看到的,我试图从主对象创建一个实例,并调用它的方法,但这不是正确的事情!当您创建MFC项目时,会自动生成两个接口,您可以使用它们来声明入站或出站调用的方法。一个带有_D前缀(在我的例子中是_DxPKTB),一个带有_D前缀和事件后修复(_DxPKTBEvents)。
当你想在c#中调用Activex方法时,你必须从它的接口创建一个实例,然后调用方法,而不是直接调用基对象的方法!
xPKTBLib._DxPKTB p = new xPKTBLib.xPKTB();
这个技巧对我有效。
Visual Studio
单击TOOLs->OPTIONS->DEBUGGING
禁用我的代码(仅管理)
在此警告下,如果启动时没有用户代码
这是我的工作