Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MSAA Automation get_accChildCount for Infragistics UltraWinTree仅在CLR下运行时有效_C++_.net_C++ Cli_Accessibility_Ui Automation - Fatal编程技术网

C++ MSAA Automation get_accChildCount for Infragistics UltraWinTree仅在CLR下运行时有效

C++ MSAA Automation get_accChildCount for Infragistics UltraWinTree仅在CLR下运行时有效,c++,.net,c++-cli,accessibility,ui-automation,C++,.net,C++ Cli,Accessibility,Ui Automation,我最近问了以下问题,发现了一个不满意的答案,这就是我提出这个问题的原因 情况如下: 进程1:C#/WinForms应用程序显示一个UI窗口,其中包含一个Infragistics UltraWinTree,其句柄值为“hwnd” 进程2:C++代码,它使用UnWestRead的可访问的子节点的值来检索具有值“HWND”句柄的代码,使用以下C++代码调用MSAA IAccessible* accessibleObj; AccessibleObjectFromWindow(hwnd, OBJID_C

我最近问了以下问题,发现了一个不满意的答案,这就是我提出这个问题的原因

情况如下:

进程1:C#/WinForms应用程序显示一个UI窗口,其中包含一个Infragistics UltraWinTree,其句柄值为“hwnd”

进程2:C++代码,它使用UnWestRead的可访问的子节点的值来检索具有值“HWND”句柄的代码,使用以下C++代码调用MSAA

IAccessible* accessibleObj;
AccessibleObjectFromWindow(hwnd, OBJID_CLIENT, IID_IAccessible, (void**)&accessibleObj);
long childCount;
accessibleObj->get_accChildCount(&childCount);
如果进程2是使用微软C++编译器构建的,它带有指定的/CLR编译器标志(它编译代码到.NET MSIL而不是汇编),子计数是正确的数字。如果它是在没有/clr编译器标志的情况下生成的,则指定的childCount是一个不正确的数字,并且在调用
AccessibleObjectFromWindow
后插入对
GetLastError
的调用将返回2(似乎是“找不到文件”)

<>为什么只有当指定编译器的/CLR标志时才执行C++代码?< /P> 编辑

对于我正在寻找的答案,我的主要目标是让这个代码运行为C++。因此,如果有一些方法可以使C++代码工作而不使用微软C++编译器上的/CLR选项,那么这将是一个公认的答案。


我真的很想知道为什么它在打开/clr标志时也能神奇地工作,但这并不是答案被接受的必要条件。如果你能同时做到这一点,你将有我最深的感激:(

< P)尝试使用MTA(调用CoInitializeEx(null,C++ C++)C++。尝试使用MTA(调用CoInitializeEx(null,CONITITH多线程))。C++:CL+CLI是一个与C++不同的动物。C++ + CLI只是C++加上一些语言扩展。如果没有使用语言扩展,或者使用CL/CLR编译器开关将其编译为.NET,则微软C++编译器可以将其编译为常规C++。我正在使用的业务逻辑代码不使用任何扩展,所以它只是香草C++代码。我更新了这个问题,希望现在更清楚。如果有任何其他问题,请告诉我。在C++/CLI中使用
nullptr
构建可以正常工作。我甚至从一个使用
nullptr
的小测试项目中反编译MSIL,它只映射到.NET中的
null
。所以回到你最初的抱怨,这个问题不应该与C++有关,你有什么具体的技术论证,为什么我在我编辑的问题中发布的四行代码与C++无关?在C++的编译器中,它们的构建和运行都很好(除了返回一个意想不到的值,比如<代码> CalpCuth[/Cuff] >。为了避免在我最后的注释中出现“Max”,“映射到<代码> null <代码> .NET”应该是可以理解的,但技术上不是100%正确的。要做到这一点,它应该阅读“从C#映射到与
null
相同的.NET MSIL(对于所使用的示例)”。我让ILSpy把.NET程序集反编译成C。嗯,C++ + CLI是一个与C++不同的动物。C++ + CLI只是C++加上一些语言扩展。如果没有使用语言扩展,或者使用CL/CLR编译器开关将其编译为.NET,则微软C++编译器可以将其编译为常规C++。我正在使用的业务逻辑代码不使用任何扩展,所以它只是香草C++代码。我更新了这个问题,希望现在更清楚。如果有任何其他问题,请告诉我。在C++/CLI中使用
nullptr
构建可以正常工作。我甚至从一个使用
nullptr
的小测试项目中反编译MSIL,它只映射到.NET中的
null
。所以回到你最初的抱怨,这个问题不应该与C++有关,你有什么具体的技术论证,为什么我在我编辑的问题中发布的四行代码与C++无关?在C++的编译器中,它们的构建和运行都很好(除了返回一个意想不到的值,比如<代码> CalpCuth[/Cuff] >。为了避免在我最后的注释中出现“Max”,“映射到<代码> null <代码> .NET”应该是可以理解的,但技术上不是100%正确的。要做到这一点,它应该阅读“从C#映射到与
null
相同的.NET MSIL(对于所使用的示例)”。我已将ILSpy设置为将.NET程序集反编译为C。