标签: managed-c++

是否有可能确定事先将.NET程序集用于哪种语言?

这开始是一种查找C++/CLI和托管C++程序集的方法,以便可以测试它们内部的所有类,以确保重新实现所有继承的方法.我想将此添加为构建过程步骤,以确保它不会再次发生.

考虑到这个问题也让我有点好奇,因为能够确定使用的任何.NET语言会很有趣.因此,我进一步比较了所有.NET语言的程序集.到目前为止,我通过我编写的一个小程序发现了这一点,它通过反射比较来自任何.NET程序集的类型和属性数据:

  • C# - 具有AssemblyConfigurationAttribute,具有GuidAttribute
  • VB - 有许多额外的"我的"类型(例如MyApplication,MySettings),有GuidAttibute
  • F# - 具有FSharpInterfaceDataVersionAttribute,它还指定所使用的编译器的版本.
  • C++(除了/ clr:safe之外) - 有一堆额外的类型(FrameInfo,type_info)
  • C++/clr:safe - 似乎没有独特的反射功能.

按此顺序解析可能是合理的:

  1. 如果它具有FSharpInterfaceDataVersionAttribute,则为F#
  2. 它是C++,如果它有我发现的大量额外类型中的任何一种.
  3. 它是VB,如果它有"我的*"类型.
  4. 它是C#,如果它有AssemblyConfigurationAttribute或GuidAttribute
  5. 它可能是C++/clr:安全

然而,由于这是一个可怕的黑客,我想在这里检查,以确保没有其他选项可用.

.net clr managed-c++ c++-cli managed

10
推荐指数
1
解决办法
525
查看次数

为什么我的TB_INSERTBUTTON消息导致comctl32抛出?

我正在尝试在Internet Explorer的工具栏中添加一个额外的按钮.

我假设实现是直截了当的,我目前正在使用此代码:

TBBUTTON buttonToAdd;
ZeroMemory( &buttonToAdd, sizeof( TBBUTTON ) );
buttonToAdd.iBitmap = 1;
buttonToAdd.idCommand = 1;
buttonToAdd.fsState = TBSTATE_ENABLED;
buttonToAdd.fsStyle = BTNS_BUTTON|BTNS_AUTOSIZE;

LRESULT insertButtonResult = SendMessage( hWndToolbar, TB_INSERTBUTTON, 0, (LPARAM)&buttonToAdd );
Run Code Online (Sandbox Code Playgroud)

发送邮件时,Internet Explorer将在90%的时间内崩溃(10%的时间,我在工具栏上有一个有点破坏的按钮),但有以下异常:

Unhandled exception at 0x000007FEFB97DDFA (comctl32.dll) in iexplore.exe: 0xC000041D: An unhandled exception was encountered during a user callback.

鉴于结果不一致,我假设某种内存布局问题.所以我尝试发送TB_INSERTBUTTONA(我的应用程序默认为TB_INSERTBUTTONW),但这对问题没有影响.

我也尝试了我的应用程序的32和64版本,两者都有相同的结果.

我看了一下iexplore.exe这个看起来像这样的callstack :

comctl32.dll!CToolbar::TBInputStruct(struct _TBBUTTONDATA *,struct _TBBUTTON const *)   Unknown
comctl32.dll!CToolbar::TBInsertButtons(unsigned int,unsigned int,struct _TBBUTTON *,int)    Unknown
comctl32.dll!CToolbar::ToolbarWndProc(struct HWND__ *,unsigned int,unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ winapi managed-c++

10
推荐指数
1
解决办法
512
查看次数

托管C++程序集属性

有没有办法将程序集属性添加到托管C++程序集?在典型的C#项目中,AssemblyInfo.cs文件中通常有一行代码,如下所示:

[assembly: AssemblyTitle("Some Assembly")]

我有一个我想要添加的私有程序集属性(不是可以通过资源文件添加的版本属性之一),我不确定这是否可行.

.net attributes managed-c++

8
推荐指数
1
解决办法
3263
查看次数

托管C++中的Verbatim文字?(比如C#的@"blah")

有没有办法在托管C++中使用逐字字符串文字?与C#相似

String Docs = @"c:\documents and settings\"
Run Code Online (Sandbox Code Playgroud)

.net c++ string managed-c++ .net-2.0

8
推荐指数
2
解决办法
2323
查看次数

Managed C++中的字符串数组

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

String ^ linet [];

抛出错误

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

所以我认为对托管数据类型有不同的方法.究竟是什么?

c++ arrays managed-c++ managed

8
推荐指数
1
解决办法
2万
查看次数

在Visual Studio中从头学习C++?

我需要非常快速地使用C++(我之前从未使用过它) - 通过Visual Studio(即托管C++)学习是否有用?或者我最终会在VS中学习C++的扩展和特性,而不是语言本身?

如果不建议在VS中学习,你们建议使用什么平台/ IDE?

编辑:在编写非托管C++时,有人可以详细说明VS将为我隐藏或管理的内容吗?我真的需要学习像指针,垃圾收集和低级语言的所有细节之类的东西.. VS是否抽象或隐藏任何这类东西给你?

感谢所有的建议..

c++ managed-c++ visual-studio

8
推荐指数
3
解决办法
1万
查看次数

为什么WPF不支持C++ .NET-- WinForms的做法?

作为C++的坚持者,这真的让我烦恼.我一直很喜欢大约十年前微软提出的"与语言无关的框架"的想法.他们为什么要放弃这个想法呢?有谁知道它背后的推理?

.net c++ wpf managed-c++

8
推荐指数
1
解决办法
4187
查看次数

是否有任何代码分析工具可以让我的工作更轻松?

我最近从一个刚退休的人那里继承了一个用Managed C++编写的程序.花了一些时间挖掘它之后,我可以诚实地说它至少有95%属于thedailywtf.但是,我现在的任务是修改它并将其移植到我熟悉的语言中.

程序本身会从文件中读取许多参数(50+)并执行一系列计算并吐出报告.一旦我完成了3个字母变量的页面(其中许多重复用于完全不相关的目的),我需要想出一种方法来测试我的代码,以确保它提供与之前相同的答案码.

这很可能是一厢情愿的想法,但有没有任何自动代码分析工具可以帮助我以任何方式或形式完成这项任务?

我将把它移植到Java.

c++ java managed-c++

8
推荐指数
1
解决办法
301
查看次数

使用/ clr时LNK2022错误

我在使用/clr编译选项时在VS2008中链接C++项目时遇到问题.我收到以下构建错误:

Class1.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_PROPSHEETPAGEA): (0x0200046f).
Class1.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_PROPSHEETPAGEW): (0x02000473).
Class2.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_PROPSHEETPAGEA): (0x0200046f).
Class2.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_PROPSHEETPAGEW): (0x02000473).
Class3.obj : error LNK2022: metadata operation failed (8013118D) : …
Run Code Online (Sandbox Code Playgroud)

c++ clr linker managed-c++ visual-studio-2008

8
推荐指数
2
解决办法
1万
查看次数

托管C++和AnyCPU

我有一个我从C#项目引用的Managed C++ dll.C#项目将编译为AnyCPU.有没有办法编译32位和64位版本的托管C++ DLL,然后在运行时告诉C#项目加载正确的一个,具体取决于它运行的架构?

.net c# managed-c++ anycpu

8
推荐指数
1
解决办法
3511
查看次数