标签: c++-cli

System.Windows.Input不可用于C++/CLI?

我正在使用C++/CLI中的ViewModel开发WPF应用程序,因此它可以使用传统的C代码.我在将命名空间System.Windows.Input暴露给C++/CLI代码时遇到了麻烦,并想知道这是否是因为WPF不支持C++/CLI?我是否真的必须插入一个C#层才能实现像Josh Smith的CommandSinkBinding这样的东西?

当我尝试在C++/CLI项目中添加引用时,我只能看到System.Windows.Presentation和System.Windows.Forms.

C#程序可以说的地方

using System.Windows.Input;
Run Code Online (Sandbox Code Playgroud)

我在C++/CLI中遇到错误

using namespace System::Windows::Input;
Run Code Online (Sandbox Code Playgroud)

错误1错误C2039:'输入':不是'System :: Windows'的成员

wpf namespaces c++-cli mvvm

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

array <Byte> ^ to unsigned char*:: Marshall class - Interop Issue

我想将数组<Byte> ^转换为unsigned char*.我试图解释我做了什么.我不知道如何继续前进.请告诉我正确的方法.我正在使用MS VC 2005.

//Managed array  
array<Byte>^ vPublicKey = vX509->GetPublicKey();

//Unmanaged array
unsigned char        vUnmanagedPublicKey[MAX_PUBLIC_KEY_SIZE]; 
ZeroMemory(vUnmanagedPublicKey,MAX_PUBLIC_KEY_SIZE);

//MANAGED ARRAY to UNMANAGED ARRAY  

// Initialize unmanged memory to hold the array.  
vPublicKeySize = Marshal::SizeOf(vPublicKey[0]) * vPublicKey->Length;  
IntPtr vPnt = Marshal::AllocHGlobal(vPublicKeySize);

// Copy the Managed array to unmanaged memory.  
Marshal::Copy(vPublicKey,0,vPnt,vPublicKeySize);
Run Code Online (Sandbox Code Playgroud)

这里vPnt是一个数字.但是如何将数据从vPublicKey复制到vUnmanagedPublicKey.

谢谢
Raj

interop cryptography c++-cli type-conversion

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

所有标准C++功能都可以在C++/CLI中使用吗?

如果我只是在C++/CLI程序中包含现有的标准C++类,它会起作用吗?

在我的测试中,一切都很顺利,但每个程序都是如此吗?

.net c++ c++-cli

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

在C++/CLI中声明函数时,变量前后符号^和*的含义是什么?

例如:

假设我们有一个名为MyClass的类.

String^ MyClass::GetSomeInfoForExamplePuprs( int InfoNumber ) { }

要么

static String ^GetOtherInfoExample() { }

要么

String ^GetOtherInfoExample(object *Something) { }

我在源代码中看到它,无法弄明白.

variables c++-cli declaration function

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

C++/CLI + Boost + Mono

概述:我有一个符合标准的C++ API,它使用Boost库,我想支持它作为Windows,OS X和Linux上的本机,可静态链接的库,我想在Windows和Mono上包装.NET在OS X和Linux上.

细节:目前我已经为所有平台进行本地编译 - 这是使用标准C++和Boost.我还得到它在Windows上编译和运行C++/CLI,但我被迫使用Boost .DLLs.下一步我不知道从哪里开始,因为我从未尝试在*nix系统上使用共享库.我知道Boost在Linux上提供了共享库(我猜想在OS X上也是如此),但是这些只是在我的Visual Studios编译的C++/CLI可执行文件中自动神奇地工作,还是我需要做一些工作?MonoDevelop没有C++/CLI编译器,但据说Visual Studios编译的CLI工作得很好......这是动态链接库让我感到困惑.

.net mono cross-platform c++-cli dynamic-linking

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

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

C#和C++可以互操作以获得高性能代码吗?

我们有传统的C++代码执行高性能数据处理(例如,从硬件设备馈送的大量数据,以时间敏感的方式处理,用于显示,转换和传输到二级存储).

我们感兴趣的是C#/ .NET用于新的GUI和新的实用程序(现有的GUI是C++ MFC和Qt).当然,对于现有系统,我们对.NET虚拟机没有"语言翻译"问题(现有代码都是C++).

经过大量的研究和许多书籍,我不确定这是否可以有效地完成.可能的方法(我错过了吗?):

  1. 重写.NET中的所有内容(不可能发生 - 代码太多,裸机设备访问,时间敏感的重算法处理)
  2. 适用于托管C++/CLI的精简适配器层
  3. 适用于托管C++/CLI的胖适配器层
  4. 不要使用.NET(经理感到非常悲伤)

我们对(2)"瘦适配器层"的关注是,如果GUI可以(重新)使用"业务"层中的逻辑(许多属性是算法派生的),那将是很好的,所以如果我们不公开/包装C++类,很多GUI逻辑只会复制业务层中的现有C++逻辑.

我们对(3)"厚适配器层"的担忧是用C#类包装每个C++类似乎非常繁琐(昂贵),并且有几本书表明跨越该边界的装箱/取消装箱访问似乎表明这种方法是不可行的/禁止(它的性能超出了琐碎的设计).

如何在C++中实现的深层次类结构之上界面新的C#/ .NET(GUI)?

performance c++-cli legacy-code

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

在Metro/C++中通过引用传递字符串?

我正在开发一个C++ Metro风格的应用程序,必须通过引用传递一个字符串(不知何故).起初,我传递了String ^,它不起作用,因为字符串是不可变的我是如何找到的.

通过引用传递字符串的正确方法是什么?

编辑:好的,似乎这并不容易,因为答案和评论建议使用返回值.但据我认为这在我的情况下不适用:在这个Metro应用程序中,我有两个页面,并且这两个页面应该"共享"一个字符串.
所以在主页面中我在点击事件中这样做:
this->Frame->Navigate(newPage, this->TestString);

在第二页的OnNavigatedTo事件中,我将第二个参数转换为String ^并更改它.然后我用this->Frame->GoBack()它导航回第一页.在那里,我想访问更改的字符串.不幸的是,就我所知,GoBack()不允许传递任何参数.

string c++-cli reference microsoft-metro

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

如何使用C++/CLI Wrapper将变量参数从托管传递到非托管?

要在托管域中实现params(可变参数)功能,我们在c ++/cli中执行以下操作,例如:

funcManaged(int n, ...array<int>^ variableParams)
Run Code Online (Sandbox Code Playgroud)

我对如何将其传递给接受可变参数的非托管域感到茫然.

funcUnmanaged(int n, ...)
Run Code Online (Sandbox Code Playgroud)

我试图传入数组,但结果很糟糕(访问冲突,垃圾数据等).

//where unmanagedVariableParamsArray is an int array
funcUnmanaged(int n, unmanagedVariableParamsArray);
Run Code Online (Sandbox Code Playgroud)

资源建议创建一个va_list并传递它,

vFuncUnmanaged(int n, va_list vl)
Run Code Online (Sandbox Code Playgroud)

但是如何在c ++/cli域中创建va_list以接受variableParams?重构遗留的非托管代码库不是理想的解决方案.

.net c# c++ c++-cli visual-c++

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

pin_ptr无法在非托管类中声明托管对象

我有非托管课程.在那个类中,我有一个托管对象.现在我想在我的unmanged类中为托管对象创建一个pin_ptr.当我尝试这样做时,我收到此错误"错误C3265:无法pinnedProject在非托管中声明托管_ ProjectWrapper如何实现此目的?

这是代码.

class ProjectWrapper
{
private:
    msclr::auto_gcroot<Project^> _project; // --> This works fine,
    pin_ptr<msclr::auto_gcroot<Project^>> _pinnedProject; // ---> This gives error
public:
    ProjectWrapper()
    {
        _project = gcnew Project();
        pin_ptr<msclr::auto_gcroot<Project^>> anotherPinnedProject = &_project; // --> This one works,
        //_pinnedProject = _project; // --> I want to use this instead of above live,
    }
}
Run Code Online (Sandbox Code Playgroud)

c# interop c++-cli

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