问题标签 [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.

0 投票
1 回答
602 浏览

.net - 将子类实例化为父类,但调用子类的方法

我正在编写一个应用程序,该应用程序需要开发用于处理数据的引擎,但该引擎必须可以根据客户的需要替换为另一个引擎。由于每个客户都有非常不同的需求,我想让每个引擎与其他引擎分开,这样我们就可以只交付带有客户所需引擎的应用程序。

所以我的 VS 解决方案有以下项目: App, Engine_Base, Engine_A, Engine_B App = exe Engine_Base = 父类...编译成 dll 并通过项目属性 Engine_A 和 Engine_B 添加到 App 的引用中Engine_Base 的子类,它们都编译为它们自己的 dll(Engine_A.dll、Engine_B.dll)。它们没有添加到 App 的引用中,因此它们不会在运行时加载,因为我们不想将两者都发送给我们的所有客户。

根据客户的配置文件,我们决定加载哪个引擎:

由于只有 Engine_Base 被添加到 C++ 项目的引用中,我们将 Engine__A 或 Engine_B 对象转换为父类型。

然后我们为引擎的线程执行设置事件,因为它们需要很长时间才能运行(需要处理大量数据):

但这给了我一个:

我意识到这与继承有关,但我对如何解决这个问题缺乏了解。

有没有人对如何解决这个问题有想法?

我们的方法是一个好的解决方案还是我们应该一直在寻找其他东西并以不同的方式做事?

0 投票
1 回答
1519 浏览

c++ - 如何将用户定义的非托管类型转换为托管类型?

我有一个在 MSTest 中编写的测试,它是托管 C++,我正在尝试测试一个非托管类。具体来说,我正在尝试使用 PrivateObject 类来调用私有方法。

这是我到目前为止的代码:

当我编译时,我得到一个错误,即 foo 不能转换为 System::Type^。我尝试过执行以下操作:

但这不起作用,因为 System::Type^ 是一种抽象类型。有任何想法吗?

我看过这些问题,但他们使用的是预定义类型,而不是用户定义的类型: 如何将非托管双精度转换为托管字符串? C ++中托管和非托管类型之间的转换?

0 投票
4 回答
19549 浏览

managed-c++ - 托管 C++ 未解析令牌

我是托管 C++ 的新手。

我在单个 .sln 中有两个托管 C++ 项目,Project Lib 和 Project LibTest。LibTest 使用 Lib。

Lib 编译和链接很好。该项目设置为 .dll。

LibTest 也被编译为 .dll,但是当它进入链接时,我在所有 Lib::methods 上得到“未解析的令牌”。这些方法定义在 Lib .cpp 文件中定义。

如果我将定义移到 Lib.h 文件中,一切正常。

我已经修改了 LibTest 的 Reference 以依赖于 Lib 项目。

我错过了什么?

编辑:好的,这正是我所拥有的,但它仍然不起作用。

首先,我使用的是 Visual Studio 2008 SP1。

其次,当我在 C# 中进行类似的练习时,它运行良好。

我创建了一个空的 C++ CLR 项目。我添加了一个 Lib 项目。我添加了一个托管类。VSTD 生成 Lib.h 和 Lib.cpp。构造函数是自动生成的。

然后我在我的解决方案中添加了另一个项目;我称它为 LibTest。我添加了另一个名为 LibTest 的托管类。生成 LibTest.h 和 LibTest.cpp。我试图在 LibTest 构造函数中实例化 Lib,但在链接过程中它只是说:

1>LibTest.obj : 错误 LNK2020: 未解析的令牌 (06000002) Lib::.ctor

这是确切的代码:

Lib 项目(编译为 .dll 项目)

LibTest 项目(编译为 application.exe)

0 投票
10 回答
162156 浏览

string - C++/CLI 从 System::String^ 转换为 std::string

有人可以发布一个可以转换的简单代码,

到,

C++std::string

即,我只想分配的值,

到,

0 投票
4 回答
1879 浏览

c# - 如何在 CLR/托管 C++ 中实现变体类型?

在.net 中,CLR 对象是所有类对象的基础,但不是基本类型(例如 int、float 等)。如何使用 Object 等基本类型?即喜欢Boost.Variant吗?

例如 -

0 投票
3 回答
19604 浏览

c++ - 托管 C++ 中的字符串数组

我正在尝试用托管 C++ 编写一个应用程序,但我无法弄清楚如何声明一个字符串数组。

字符串^ linet[];

抛出错误

'System::String ^' : 本机数组不能包含此托管类型

所以我想对于托管数据类型有不同的方法来做到这一点。它到底是什么?

0 投票
1 回答
199 浏览

c# - 值未在本地存储的 DependencyProperties

我对创建一个DependencyProperty依赖于外部资源的属性有点困惑。例如,在我正在编写的超声应用程序中,我目前在托管 C++ 包装器中有以下内容(为了简单起见,此处翻译为 C#,实现 INotifyPropertyChanged):

我所有的代码都在 WPF 中使用,我正在考虑如何更改INotifyPropertyChangedtoDependencyProperty以及是否会从更改中受益。大约有 30 个变量与此类似,其中大部分都将数据绑定到屏幕上的滑块、文本块或其他控件。

DependencyProperty以下对于为此对象实现 a 是否正确?

我从未见过this.GetValue(GainProperty)未使用的示例。此外,还有其他功能可能会更改该值。这也是正确的改变吗?

另外,附带说明一下,在大多数属性是数据绑定的情况下,我是否应该期望性能提升,或者更确切地说,在许多参数不是数据绑定的情况下性能损失?

0 投票
3 回答
1899 浏览

c# - 从托管 C# 回调非托管代码

这里有点历史课。我正在开发一个遗留的 C++/MFC 应用程序,并试图通过推送用 C#(WinForms 和更高版本的 WPF)编写的组件来开始增量现代化。

我坚持使用 .Net/1.1 和 VS/2003 有很多原因,这些原因在不久的将来无法解决。

目前,作为概念证明,类似这样的工作:

我遇到的问题是 - 我需要非托管 C++/MFC 代码将回调指针传递给托管 C# WinForm 代码,以便我可以捕获用户交互并让应用程序处理它们。

我看过一些文章,例如这个 MSDN 文章,但它在 VS/2003 中不起作用(编译器不喜欢委托语法)。

还有其他选择吗?我认为我不能使用 DLLImport,因为我需要与特定的应用程序实例而不是平面 API 进行交互。

谢谢!

0 投票
3 回答
516 浏览

c# - C++ 调用 C# 选项

我们有本机 Win32 C++ 代码和一组我们希望从 C++ 代码调用的 C# 程序集。我将我们的选项总结为:

  1. 使用 COM。C# 代码需要使用其他属性(GUID、COMVisible)进行修饰。C# 程序集需要注册 regasm,然后通过 COM 可用于本机 C++ 代码。

  2. 使用 C++/CLI(以前托管的 C++)包装类。可以将 C++ 类添加到本机 C++ 项目中。该类将使用 /clr 编译。本机 C++ 代码将调用 C++/CLI 类,然后再调用 .Net 代码。不涉及 COM。CLR 由 C++/CLI 扩展处理的编组所需的魔法启动。

  3. 在本机 C++ 代码中托管 CLR 的实例。

我将打折选项 3,因为除了我们不再需要包装类之外,我看不到选项 2 的好处。所以问题是,选项 1 与选项 2 的优缺点是什么?

提前致谢。

0 投票
7 回答
6044 浏览

memory - 发布模式下的 AccessViolationException (C++)

当我从 Visual C++ 以发布模式运行我的应用程序时,出现以下异常。

未处理的异常:System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。在 _cexit() 在 .LanguageSupport._UninitializeDefaultDomain(Void * cookie) 在 .LanguageSupport.UninitializeDefaultDomain() 在 .LanguageSupport.DomainUnload(对象源,Eve ntArgs 参数) 在 .ModuleUninitializer.SingletonDomainUnload(Objec t 源,EventArgs 参数)

这不会在调试模式下发生。最初,我在家用计算机上看到了这个异常,但在工作计算机上却没有。当我继续在我的工作计算机上开发时,我最终碰到了它。

另外,我发现当我添加三个 const std::string 变量时,抛出了异常。如果我删除然后一切顺利。

另一条信息:我发现在发布模式下关闭所有编译器优化会使异常消失

一些可疑的事情正在发生。关于如何追踪这一点的任何想法?

谢谢你的帮助,乔