如何确定.NET应用程序的依赖项?Dependency Walker是否适用于托管应用程序?我已经下载了最新的并尝试过分析应用程序,但它只是在没有太多解释的情况下退出.如果它不能与.NET一起使用,那么是否有其他工具可以帮助我调试运行时DLL加载问题?
我试图找出我的应用程序在程序本身内消耗了多少内存.我正在寻找的内存使用量是Windows任务管理器的"进程"选项卡上"内存使用情况"列中报告的数量.
什么是从char*转换为System :: string并返回C++/CLI的批准方式是什么?我在Google上发现了一些对marshal_to <>模板化函数的引用,但看起来这个功能从来没有为Visual Studio 2005做过(而且在Visual Studio 2008中也没有,AFAIK).我还在Stan Lippman的博客上看到了一些代码,但它是从2004年开始的.我还看过Marshal :: StringToHGlobalAnsi().有没有一种被认为是"最佳实践"的方法?
我们正在实现一个需要可停靠窗口的应用程序,类似于Visual Studio 2005/2008,但具有多个"停靠站点",与VS的单一站点不同.有没有人建议在一个好的图书馆 - OSS或商业?我知道Infragistics有一个,以及来自DevComponents的Divelement的SandDock和WPF-Dock,以及ActiPro的Docking和MDI产品.CodeProject上还有一个.有没有人使用过这些库?体验好坏?如果您有其中一个经验,它是否支持多个"停靠站点"?
我正在尝试在WPF中创建一个选项卡控件,其中选项卡位于控件的右侧,文本旋转90度.外观类似于您可以在笔记本中购买和使用的塑料选项卡.我已经尝试将TabStripPlacement更改为Right,但它只是将选项卡堆叠在控件的右上方 - 根本不是我想到的.
我有一个多线程C++应用程序,它使用OpenSceneGraph库进行3D渲染.我打算使用boost :: threads将OSG的渲染循环作为一个单独的线程,将包含共享状态的数据结构传递给线程.我试图避免任何太重量级(如互斥量)的同步,因为渲染循环需要非常紧,OSG本身试图避免必须锁定.大多数共享状态在线程启动之前设置,并且从不更改.我确实有一些需要更改的数据,我计划双重缓冲.但是,我有一个简单的布尔值来表示线程暂停渲染,然后恢复渲染,另一个杀死它.在这两种情况下,app线程都会设置bool,而渲染线程只会读取它.我是否需要同步访问这些bool?据我所知,可能发生的最糟糕的事情是渲染循环在暂停或退出之前继续进行额外的帧.
我在本机C++类中使用boost :: signal,现在我在C++/CLI中编写.NET包装器,这样我就可以将本机C++回调公开为.NET事件.当我尝试使用boost :: bind来获取托管类的成员函数的地址时,我得到编译器错误3374,说我不能获取成员函数的地址,除非我创建一个委托实例.有谁知道如何使用boost :: bind绑定托管类的成员函数?
为了澄清,以下示例代码导致编译器错误3374:
#include <boost/bind.hpp>
public ref class Managed
{
public:
Managed()
{
boost::bind(&Managed::OnSomeEvent, this);
}
void OnSomeEvent(void)
{
}
};
Run Code Online (Sandbox Code Playgroud) 我们有一个C++库,我们提供给几个不同的客户端.最近我们改用了在公共接口中使用原始指针而不是使用boost :: sharedptr.正如您可能猜到的那样,这提供了巨大的好处,因为现在客户不再需要担心谁需要删除什么以及何时删除.当我们进行切换时,我认为这是正确的做法,但是让我感到困扰的是我们必须在公共界面中包含来自第三方库的内容 - 如果可以的话,通常会避免这种情况.我认为提升实际上是C++语言的一部分,我们的用例要求客户端代码和库都保存指向对象的指针.然而,最近我们的一位客户问我们是否可以在界面中切换到使用中性智能指针类,因为我们的图书馆实际上是强迫他们使用特定版本的提升 - 这一点我当然理解和欣赏.所以现在我想知道什么是最好的行动方案.我已经考虑了一下,并想知道如何创建一个简单的智能指针类,它只是一个真正的提升智能指针.但是客户端可能会立即将其中一个填充到boost :: sharedptr中,然后我们将深入分析三个 - 这可能是一个问题,或者可能不是.无论如何,我很想听听社区关于解决这个问题的最佳方法的一些意见.我已经考虑了一下,并想知道如何创建一个简单的智能指针类,它只是一个真正的提升智能指针.但是客户端可能会立即将其中一个填充到boost :: sharedptr中,然后我们将深入分析三个 - 这可能是一个问题,或者可能不是.无论如何,我很想听听社区关于解决这个问题的最佳方法的一些意见.我已经考虑了一下,并想知道如何创建一个简单的智能指针类,它只是一个真正的提升智能指针.但是客户端可能会立即将其中一个填充到boost :: sharedptr中,然后我们将深入分析三个 - 这可能是一个问题,或者可能不是.无论如何,我很想听听社区关于解决这个问题的最佳方法的一些意见.
编辑:我原先说的是所有权的转移,但是我应该指定API边界两侧的代码需要保存一个指向该对象的指针.
我已经构建了一个我想要部署的MSI,并经常更新.不幸的是,当您安装MSI,然后尝试安装相同MSI的较新版本时,它会失败,并显示"此产品的另一个版本已安装.此版本无法继续安装..."的消息.MSI是使用Visual Studio 2008安装项目构建的.我已经尝试将"删除以前的版本"属性设置为true和false,以便只是让新版本覆盖旧版本,但没有任何工作.在以前的公司,我知道我对Wise和Advanced Installer构建的安装程序没有这个问题.我缺少一个设置吗?或者VS 2008安装项目不支持我想要的功能吗?
我有一个WPF应用程序,它使用我使用C++/CLI创建的Winforms用户控件.当我的应用程序为我的主窗口解析XAML时,它会抛出异常.这些信息似乎略有缩略,但它说:
A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll
Additional information: is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) Error in markup file 'OsgViewer;component/osgviewerwin.xaml' Line 1 Position 9.
Run Code Online (Sandbox Code Playgroud)
我在XAML中注释掉了我的Winforms控件,一切都很好.我想也许我的控件的构造函数做了一些坏事,所以我在其中放了一个断点,但是当我开始运行应用程序时,断点似乎没有启用,并且从未被命中,我理解为DLL包含该行未加载.当DLL中的类型的对象被实例化时,最有可能导致抛出异常 - 无法找到对象的构造函数的主体.
我过去在一个不同的项目上成功完成了这个,所以我从该应用程序中引入了一个不同的WinForms用户控件,并在XAML中实例化,并且一切正常.
所以这是这个DLL中的东西.我在我的WPF C#app中引用了DLL,当我在对象浏览器中加载DLL时,所有必需的类和命名空间都显示正常.该应用程序编译正常,解析XAML时问题就出现了.有谁见过这样的东西?关于可能导致这种情况的任何想法?调试的想法呢?谢谢!
<Window x:Class="OsgViewer.OsgViewerWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:int="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:myns="clr-namespace:MyGlobalNS.MyNS;assembly=MyAssembly"
...
<int:WindowsFormsHost x:Name="m_Host">
<myns:CMyClass x:Name="m_MyClass" />
</int:WindowsFormsHost>
...
</window>
Run Code Online (Sandbox Code Playgroud) c++ ×3
wpf ×3
.net ×2
c++-cli ×2
xaml ×2
api ×1
boolean ×1
boost ×1
boost-bind ×1
c# ×1
delegates ×1
dependencies ×1
dll ×1
dockable ×1
mutex ×1
shared-ptr ×1
string ×1
tabcontrol ×1
versioning ×1
windows ×1
winforms ×1