问题标签 [managed-c++]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
managed-c++ - 托管 C++ 中的事件:事件、WindowEvents 的问题
使用托管 C++(新项目向导中的 C++/CLR)处理 VisStudio 2008 插件。
在 OnConnection() 函数中,我想向 WindowEvents 集合添加一个处理程序。
当我这样做时:
// 连接事件
EnvDTE::Events ^ events = _applicationObject->Events;
EnvDTE::WindowEvents ^winEvents = 事件->WindowEvents();
我收到一条错误消息:
错误 C2660:'EnvDTE::Events::WindowEvents::get':函数不接受 0 个参数
在对象浏览器中,我发现:
public EnvDTE.WindowEvents WindowEvents(EnvDTE.Window WindowFilter = null) { get; }
感谢您对我做错的任何提示...
c++ - 在 Visual Studio 中从头开始学习 C++?
我需要快速掌握 C++(我以前从未使用过它)——通过 Visual Studio(即托管 C++)学习会有用吗?还是我最终会在 VS 中学习 C++ 的扩展和特性,而不是语言本身?
如果不建议在 VS 中学习,你们建议使用什么平台/IDE?
编辑:任何人都可以详细说明在编写非托管 C++ 时 VS 将为我隐藏或管理什么?我真的需要学习指针、垃圾收集和低级语言的所有细节。VS 是否对你抽象或隐藏了这些东西?
感谢所有的建议..
c++-cli - 托管 c++ 语法
尽我所能,我无法将此托管 C++ 代码转换为 C++/CLI。有人可以指点一下(双关语)吗?
稍后在代码中,调用了 Add(string) 方法。在其他地方,在一些 C# 代码中,
被传递给一个函数,该函数以某种方式转换为上面的 ignoreStrings 类型。
我试过这种语法:
但它不能从那个 C# 数组中强制转换,而且它也没有 add 方法。
编辑:更完整的代码,希望这能以某种方式改变问题......
在其他地方,从 C# 代码进行此调用:
这就是我试图将 C++ 代码转换为:
c++ - 在 C++ CLR 值类型上需要 pin_ptr,为什么?
由于 .NET 值类型(托管 C++ 结构)存储在堆栈上,为什么(或者实际上)需要 pin_ptr 以将指针传递给非托管函数?
例如。字节 b[100];
如果我将 &b 传递给一个非托管函数而没有先固定它,堆栈可能会损坏吗?
CLR 堆栈是否会以与 GC 堆相同的方式更改?我被引导相信 CLR 堆栈使用了不寻常的优化,例如使用处理器寄存器,这使得它不适合用作非托管函数的缓冲区。关于在堆栈上固定值类型的规则似乎不清楚。
我注意到以这种方式将缓冲区数组发送到内核 NTDLL 函数 NtfsControlFile 时似乎出现了一些损坏。固定值类型解决了这个问题。但从不调用 API。
因此,将任何指向堆栈上任何值类型的指针传递给任何非托管函数,而不首先固定它们,这难道不是根本不安全的吗?
.net - 理解 C++ .Net 中的 String^
我记得在某处看到“^”运算符在托管 C++ 代码中用作指针运算符。因此“^”应该等同于“*”运算符对吗?
假设我的理解是正确的,当我开始理解 .Net 并编写了一些示例程序时,我遇到了一些这样的代码:
我很难理解这一点。
namespaces - 命名空间问题中的私有/公共类
这是一个关于将类定义为公共或私有的问题。
现在,我在命名空间内定义了各种类,我只希望其中一些类对外界可见/可用。
因此,例如,如果下面的类是程序中唯一的类,我希望 main.cpp 只能看到/使用 MyPublic 类,而不是 MyPrivate 类。我认为将 MyPrivate 类定义为 private 并将 MyPublic 类定义为 public 可以实现这一点,但是下面的代码有效并且 main.cpp 能够声明一个 MyPrivate 对象。
是否可以在 C++ 中做到这一点?
我的私人.h:
MyPublic.h:
主要.cpp:
.net - 在 VS2008 中,我在哪里为(托管)C++ 项目配置“平台目标”?
在 VS2008 中,我可以指定 C# 程序集只针对 x86 平台,方法是转到项目属性,单击“构建”部分,然后设置“平台目标”框。
用 C++ 编写的程序集的等价物是什么?
.net - 通过引用托管 C++ 方法传递非托管 C++ 结构会在引用该结构时导致访问冲突
我试图通过这个结构:
对这个类的静态方法:
从这个函数:
在 64 位系统上,我收到访问冲突,指出无法读取地址“0x000c”。
现在,在 64 位系统上,如果 par 的引用是空指针,则 par.type 的取消引用将是 0x0c 的地址。除了 par 在堆栈上 - 我没有将空指针传递给 WriteField,但我似乎得到了一个。
现在,在托管 C++ 中,当从一个托管类实例方法调用另一个静态方法时,我通过引用传递非托管结构这一事实是否容易受到某种编组问题的影响?
是否有任何 Web 文档解释托管代码如何处理非托管结构?
managed-c++ - WinPE 中的托管代码
如果我想在 Windows PE(Vista 或 7)中运行程序,我是否不允许使用任何级别的托管代码?
我只能拥有不引用任何 dotNet 代码的 c++ 代码吗?
如何与窗口交互?我必须使用 user32.dll 类型的文件来执行各种操作吗?
visual-c++ - C++/CLI -- 0xc000007b (INVALID_IMAGE_FORMAT) 带有 /clr 选项
我正在尝试构建一个 C++/CLI 可执行文件,我将 ffmpeg(libavcodec、libavformat、libavutil 和 swscale)静态链接到该可执行文件。如果我正常构建它(没有 /clr,所以没有 CLR 支持),它可以正常工作,它可以工作。但是,当我添加 CLR 支持时,它不会以 0xc000007b 启动。不过,“Hello World”C++/CLI 应用程序运行良好。
据说 Boost::Threads 也会发生同样的事情,但由于 ffmpeg 是纯 C 语言,我怀疑它是否使用了 Boost。
我的配置:
- Visual Studio 2008 专业版 SP1
- Windows XP 专业版 SP3 (x86)
- .NET 框架 3.5 SP1
谢谢,罗伯特