Tag: c ++ cli

C ++ / CLI中使用的动态C#对象

我目前正在构建一个c ++ / cli互操作库。 该库将由c#和vb.net应用程序使用,我想使用.Net 4动态类型。 我有一个配置模块使用动态成员访问来引用配置键,这在c#中工作得很好但是在c ++ / cli中给我带来麻烦(并非完全出乎意料)有没有办法在C ++ / CLI中使用这个库(例如通过直接调用TryGetMember()或其他东西)? 如果C ++ / CLI库然后将动态配置传递给用C#编写的派生类,那么C#是否仍然能够使用动态成员访问? 请注意,基类是在c ++ / cli中定义的,因此我无法使用dynamic关键字。 (或者我会吗?)

C静态库的包装器

我有C静态图书馆相机。 现在Plan计划为Windows 8开发C#/ WPF UI,它将使用C静态库来捕获video/音频。 我想到了C Static的C ++ / CLI包装器.Wrapper将是Managed Dll。 C#/ WPF UI将使用此Dll捕获video/音频。 我想知道这种方法是否会好。 欢迎提出替代建议。请各位建议。

C ++到C#事件处理

所以我有了我的C# WinForm应用程序,从它我称之为C ++ CLI MFC dll库。 但是我的C ++库上有一些事件 ,即使这个事件发生在这个库的本机(非CLI)部分。 我需要从我的C#应用​​程序调用一些代码,并在此事件上获得一些数据。 所以当从客户端调用这个本机函数时: bool __stdcall ClassName::WorkQuery() { …… switch(pp->code) { case READCOMPLEX: ………. 我需要从C#带来数据, 所以我需要以某种方式将此注册为事件。

用C ++编写事件并用C#处理它们

我有一台带有一些数字I / O引脚的工业计算机。 制造商提供了一些C ++库和示例来处理引脚状态更改。 我需要将这些事件集成到C#应用程序中。 AFAIK执行此操作的最简单方法是: 为从DIO引脚发出中断时触发事件的制造商库创建托管C ++ / CLI包装器。 引用包装并处理C#部分中的事件,因为它们是正常的C#事件。 我试图用一些没有运气的模拟对象来完成这项工作。 从文档中,函数EventHandler应该完成我案例中的大部分“脏工作”。 以下有关旧线程和MSDN文档中的EventHandler示例的信息,我最终得到了以下测试代码: C ++ / CLI using namespace System; public ref class ThresholdReachedEventArgs : public EventArgs { public: property int Threshold; property DateTime TimeReached; }; public ref class CppCounter { private: int threshold; int total; public: CppCounter() {}; CppCounter(int passedThreshold) { threshold […]

我可以通过引用传递参数的函数/方法和在C ++中通过值传递的重载吗?

在C#中,这肯定是可能的,因为这个可编辑的例子可以显示: static void Teste(int x) { } static void Teste(ref int x) { } static void Teste() { int i = 0; Teste(i); Teste(ref i); } 但是可以使用构造函数在C ++(/ CLI)中完成吗? 请参阅以下示例: class Foo { Foo(int bar) { // initializing “Foo” instance… } Foo(int &bar) { // initializing “Foo” instance… } //… } 虽然这个类确实使用这些构造函数进行编译,但我无法看到如何选择何时应用另一个,即调用是ambiguos,因为在C#中没有为此目的知道的关键字“ref”。 我在构造函数中尝试了它,其中名称必须与类相同(当然我可以添加一个无用的参数,但我想知道我是否不能这样做)。 顺便说一句,我用谷歌搜索,只有“通过参考和价值之间有什么区别?” 但没有像这样覆盖超载。 […]

防止在非托管代码中使用的托管引用的垃圾回收

我的C#应用​​程序使用包装的C ++代码进行计算。 C ++标题: __declspec(dllexport) void SetVolume(BYTE* data, unsigned int width); C ++ / CLI包装器: void SetVolume(array^ data, UInt32 width) { cli::pin_ptr pdata = &data[0]; pal->SetVolume(pdata, width); } C# : public startCalc() { byte[] voxelArr = File.ReadAllBytes(“Filtered.rec”); palw.SetVolume(voxelArr, 490); //GC.KeepAlive(voxelArr); makes no sense } C ++ SetVolume函数启动异步计算。 voxelArr不再从托管端引用,并且是垃圾回收。 在非托管代码完成工作而不将voxelArr声明为全局变量之前,如何防止此引用的垃圾收集? 创建数组副本不是一个选项,因为实际上有很多数据。 startCalc()内部的主动等待也不好。

在C ++ / CLI项目中识别有问题的依赖项

我的应用程序编译正常,但我得到以下运行时错误: System.IO.FileNotFoundException was unhandled HResult=-2147024770 Message=Could not load file or assembly {Wrapper} or one of its dependencies. The specified module could not be found. 调用Application中对Wrapper的引用看起来是正确的。 Wrapper dll存在于正确的位置。 这个项目用于在别人的系统上构建和运行,我看了几次。 该人/计算机不再可用。 自上次成功构建和运行以来,某些依赖项的某些路径已发生更改,我已修复了与此相关的所有编译错误。 只是为了澄清我的项目结构: Digraph G { App [ label = “My C# Application”] Wrapper [ label = “C++/CLI Wrapper”] Lib [ label = “C++ Library”] Dll [ […]

如何将常量与C#中的接口相关联?

有些语言允许您将常量与接口相关联: 一个Java示例 一个PhP的例子 W3C抽象接口也是如此,例如: // Introduced in DOM Level 2: interface CSSValue { // UnitTypes const unsigned short CSS_INHERIT = 0; const unsigned short CSS_PRIMITIVE_VALUE = 1; const unsigned short CSS_VALUE_LIST = 2; const unsigned short CSS_CUSTOM = 3; attribute DOMString cssText; attribute unsigned short cssValueType; }; 我想定义这个接口,以便可以从C#调用它。 显然,C#无法定义与接口关联的常量。 将此类接口转换为C#的常用方法是什么? 是否有任何针对DOM接口的“规范”C#绑定? 虽然C#不能,是否有另一种.NET语言可以定义与接口相关的常量?

为什么我在C#项目中看不到一些C ++ DLL(支持CLR)?

我写了简单的C ++ Dll(win32),我将属性更改为’Common Language Runtime Support(/ clr)’ – 我创建了新的Simple winform项目(C#4.0),并创建了对C ++项目(C ++ DLL)的引用。 现在我无法在C#项目中看到C ++ DLL – 我无法使用它,我也不知道为什么。

C ++ / CLI:如何将模板数组声明为方法参数

我是C ++ / CLI的新手。 对于头文件和源文件,托管C ++ / CLI中的以下C#代码相当于什么? public static bool ArrayEquals(T[] a, T[] b) { return true; }