当前位置: 首页 > 编程语言 > C#

在非托管C++项目中使用C#COM--0x7697C41FFirstChanceException(KernelBase.dll)分享

时间:2023-04-10 16:39:35 C#

在非托管C++项目中使用C#COM->0x7697C41FFirstChanceException(KernelBase.dll)在非托管VisualC++解决方案中调用C#COM项目中的方法,但我不断在Program.exe中的0x7697C41F(KernelBase.dll)处收到下一个错误第一次机会异常:0x04242420(参数:0x31415927、0x6F310000、0x00BBDAE8)。在下一段代码中SalesForceNew::IMyObjectClassPtrp;p.CreateInstance(__uuidof(SalesForceNew::TestObject));//错误SalesForceNew::MyObjectmo=p->getObject(1,"a");但是,mo的值符合预期(5,"aa")。我用这行代码导入tlb文件:#import"C:UsersBobDesktopComTestSalesForceNewbinx86DebugSalesForceNew.tlb"named_guidsC#项目如下:interface:usingSystem.Runtime.InteropServices;namespaceSalesForceNew{[ComVisible(true)][Guid("22901ACD-CA30-4D3E-B84B-73B707026AE5")]publicinterfaceIMyObjectClass{MyObjectgetObject(inti,strings);}[ComVisible(true)][StructLayout(LayoutKind.Sequential)]publicstructMyObject{publicintGetal;公共字符串文本;}}实现接口的类:usingSystem.Runtime.InteropServices;命名空间SalesForceNew{[ClassInterface(ClassInterfaceType.None)][Guid("234A2A35-F270-458D-A67B-C834EB794B27")][ComVisible(true)]publicclassTestObject:IMyObjectClass{publicMyObjectgetObject(inti,strings){返回新的MyObject(){Getal=i*5,Text=s+s};我检查了COM互操作注册选项和C#COM项目的COM互操作属性注册使程序集COM可见。更新:如果我们将C#COM项目的框架版本更改为2.0、3.0或3.5,则不会出现错误。它仅在frameworkversion为4.0或4.5时显示。异常代码小于0x80000000的异常是非致命异常。它们通常用于传递信息。鞋子适合这里,异常代码0x04242420已被逆向工程为CLRDBG_NOTIFICATION_EXCEPTION_CODE,将数字输入google查询以查看命中率。微软员工的回答可能是最可靠的:出于好奇,我做了一点挖掘,发现这实际上是一个未记录的异常(CLRDBG_NOTIFICATION_EXCEPTION_CODE),显然是对4.0CLR中托管调试器使用的IPC协议的补充.忽略它应该是绝对安全的。以上就是《C#学习教程:UsingC#COM->0x7697C41FFirstChanceException(KernelBase.dll)inanUnmanagedC++Project》的全部内容,如果对大家有用,需要进一步了解C#学习教程,本人希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: