Tag: c ++ cli

如何将共享C#NuGet依赖项添加到C ++ / Cli项目?

上下文:具有2个程序集,Cs和Cpp的Visual Studio解决方案。 Cs是C#/ .net45 dll Cpp是一个C ++ / Cli dll,一个用/ clr编译的C ++ DLL。 我有一些来自nuget.org的纯C#项目的依赖项。 我使用作者提供的原始包。 将它们添加到Cs项目工作正常,但不是Cpp。 如何将C#包添加到C ++项目中? 因为它是C ++ / Cli,所以我可以很容易地使用.net对象,并且我在C#库中使用例如来自C#库的东西。 但不知何故nuget只允许我选择C#项目来添加C#依赖,而不是C ++ / clr。

将HWND转换为IntPtr(CLI)

我的C ++ MFC代码中有一个HWND,我想将这个HWND传递给C#控件并将其作为IntPtr。 我的代码有什么问题,我该怎么做才能正确? (我认为这是使用CLI指针的错误,因为我得到一个错误,它无法从System :: IntPtr ^转换为System :: IntPtr。但我不知道如何让它完全正常工作。 ..) 我的C ++ MFC代码: HWND myHandle= this->GetSafeHwnd(); m_CLIDialog->UpdateHandle(myHandle); 我的C#代码: public void UpdateHandle(IntPtr mHandle) { …… } 我的CLI代码: void CLIDialog::UpdateHandle(HWND hWnd) { System::IntPtr^ managedhWnd = gcnew System::IntPtr(); HWND phWnd; // object on the native heap try { phWnd = (HWND)managedhWnd->ToPointer(); *phWnd = *hWnd; //Deep-Copy the Native […]

使用C ++ / CLI进行100%托管开发有什么好处?

使用C ++ / CLI进行100%托管开发有哪些优点(可能存在的缺点列表)(即使用/ clr:safe编译,“生成…程序集,就像用C#编写的那样”) )? 特别是在考虑C#时(注意C ++ / CLI:优于C#的 优势,使用C ++ / CLI相比标准C ++或C#有什么优势?主要是关于托管/非托管互操作)。 例如,这里有一些我的头脑: C ++ – 托管类型的样式引用 ,不像完整的非可空引用那样优雅,但总比没有好或使用解决方法 。 模板比generics更强大 预处理器(这可能是一个缺点!,但宏可用于代码生成) 引用类型的堆栈语义 – 自动调用IDisposable :: Dispose() 通过C ++析构函数更容易实现Dispose() C#3.0添加了自动实现的属性,因此不再具有C ++ / CLI优势。

需要为C ++ / CLI创建什么类型的项目?

我正在为C ++ / CLI中的本机C ++方法编写一个包装器,它将它们暴露给C#。 现在我正在使用Visual Studio 2008.任何人都可以告诉我需要创建什么类型的项目,以便我的包装器将暴露给C#。 我在Visual Studio 2008中看到Visual C ++ —> CLR —->下有不同类型的项目 class library, CLR Empty Project, Windows form control library, CLR Console Application, Windows Forms Application, Windows Service 我应该使用哪一个?

在C#对象上调用C ++ / CLI删除

我正在将一些代码从C ++ / CLI转换为C#。 其中一个对象在C ++ / CLI版本中有一个析构函数。 其他一些C ++ / CLI代码在使用后调用此对象上的“delete”。 我需要在此对象的C#版本中实现哪种方法,以便那些“删除”继续运行相同的function(IDisposable.Dispose,终结器或其他我缺少的东西)?

C#到C ++ / CLI到C DLL System.IO.FileNotFoundException

我收到System.IO.FileNotFoundException: The specified module could not be found运行调用C ++ / CLI程序集的C#代码时System.IO.FileNotFoundException: The specified module could not be found ,C ++ / CLI程序集又调用纯C DLL。 只要实例化一个调用纯C DLL函数的对象就会发生这种情况。 BackingStore是纯C.CPPDemoViewModel是C ++ / CLI调用BackingStore它有一个对BackingStore的引用。 我尝试了最简单的案例 – 添加一个新的C#unit testing项目,它只是试图创建一个在CPPDemoViewModel中定义的对象。 我从C#项目添加了一个引用到CPPDemoViewModel。 只需添加对CPPDemoViewModel的引用,C ++ / CLI测试项目就可以正常工作,因此它可以在语言之间进行。 我正在使用Visual Studio 2008 SP1和.Net 3.5 SP1。 我正在构建Vista x64,但一直小心确保我的平台目标设置为x86。 这感觉就像一些愚蠢和明显的我想念但是浪费时间试图私下解决它会更加愚蠢,所以我在这里让自己尴尬! 这是对一个移植大量遗留C代码的项目的测试,我将其保存在一个带有在C ++ / CLI中实现的ViewModel的DLL中。 编辑检查目录后,我可以确认尚未复制BackingStore.dll。 我有一个标准的独特项目文件夹,使用典型的多项目解决方案创建。 WPFViewModelInCPP 备份存储 […]

C ++ / CLI:防止非托管资源的托管包装上的垃圾回收

我有一个需要在C#中使用的C ++非托管类NativeDog ,所以我创建了一个包装类ManagedDog 。 // unmanaged C++ class class NativeDog { NativeDog(…); // constructor ~NativeDog(); // destructor … } // C++/CLI wrapper class ref class ManagedDog { NativeDog* innerObject; // unmanaged, but private, won’t be seen from C# ManagedDog(…) { innerObject = new NativeDog(…); … } ~ManagedDog() // destructor (like Dispose() in C#) { // […]

使用本机C ++,托管c ++ cli和c#解决方案在混合模式下进行调试

我有一个multithreading项目正在进行中,启动项目设置为运行我的UI的ac #project。 然后有一系列基础c ++本机项目,它们通过托管C ++ / CLI项目连接到C#。 我在c#启动项目中启用了“启用非托管调试”,当我尝试调试本机代码时,我能够达到我设置的断点。 但是,在我尝试再次运行并尝试再次达到断点之后,它会挂起。 例如,如果我有一个循环,我尝试在每次迭代中触及它,在第二次迭代后程序挂起并且我必须强制退出。 我在Visual Studio 2010中工作。调试开始certificate在这个速度下不太有用,有没有办法排除这个问题?

在C ++ / CLI中是否有与C#“var”关键字相同的名称?

在C#中,我喜欢var关键字,例如: var myList = new List(); 在C ++ / CLI中是否有任何等价物,或者每次都必须重复类型名称,如下所示: List^ myList = gcnew List(); 到目前为止,无法在文档或Google中找到明确的声明。 我正在使用Visual Studio 2008。

如何使用MonthCalender在文本框中插入日期?

我的Windows窗体中有一个textBox1 。 我想用它来获取用户的日期。 我想在用户将光标放在textbox1显示MonthCalender1 ,然后自动在textbox1设置日期,然后日历将消失。 我如何使用C#或C ++ / CLI来做到这一点?