标签: c++-cli

将C++/CLI转换为C#

我如何将小型C++/CLI项目翻译成c#

c# c++-cli

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

如何使用C++/CLI编写Winforms应用程序

是否有pdf或视频或某些媒体可以告诉我如何使用C++编写Winforms.显然,C++是最常用的编程语言,我已经掌握了一些先验知识.但是,当我尝试在C++中找到有关编程的媒体时,这些示例通常是控制台应用程序.我想要一些可以教会我如何用C++编写Winforms的媒体.

c++-cli winforms

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

托管对象,为什么不会(^).编译?

我最近需要考虑控制串口,所以我转向.net.我想,既然我正在使用visual studio,这很容易......我错了......

在弄清楚" ^"和" gcnew"之后,我偶然发现了" ->我仍然发现(*)."的意思" "(不知道这是由于我自己的无知).

问题是:

如果" ->"相当于" (*)."而" ^"相当于" *"

那么为什么(^).在键入它时不会" "编译它会导致自动完成?或者我在这里遗漏了什么?

.net pointers c++-cli visual-studio

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

在c ++/cli中创建命名空间?

using在c ++/cli中看到了很多.NET Framework命名空间的例子,如下所示:

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

但我还没有看到任何创建自己的例子.所以我想知道是否有一种方法来声明/创建我自己的命名空间,就像在C#中一样:

namespace Animals
   {

   public class Dog
       {
       public Dog() {}
       }
   }
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间 :)

c# namespaces c++-cli

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

将DllImport从C#console app中的静态类的静态成员转换为C++ CLR控制台应用程序的成员

我有以下内容,我不能转移围绕DllImport的错误

#include "stdafx.h"
#include <msclr/auto_gcroot.h>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Runtime::InteropServices;
using namespace System::Threading;
using namespace System::Collections::Generic;
using namespace System::Text;

namespace WinFlix
{
    class FlickWin
    {
        [DllImport("user32.dll")]
        extern "C" bool SetForegroundWindow(IntPtr hWnd);
Run Code Online (Sandbox Code Playgroud)

我一直在从C#转换这个类,它是一个static类,在C++ .NET中不可用.我的新C++项目是"CLR控制台应用程序"类型.

我明白了

错误C2059:语法错误:'string'

错误C2238:';'之前的意外标记

都指的是'extern"C"'行.

我已经搜索过我之前的工作,虽然我能胜任C++/CLI,但我之前不必调用这样的WinAPI函数.这两个错误都是在打我: - /

TBH,这件事耗尽了我的耐心而我删除了它,可以回去重新创建它,但我更喜欢修复我的C#而不是.尽管如此,请帮助赞赏以供参考

c# translation c++-cli dllimport static-classes

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

如何使用模板类修复警告C4793?

cl /c /clr /W4编译器编译下面的代码时说

warning C4793: 'Interface::'vcall'{0}'' : function compiled as native

所以pragma似乎没有任何影响..有没有办法解决这个问题?或者这是一个错误(该编译指示是否适用于非模板类)?可以安全地禁用此警告吗?

#pragma unmanaged

struct Interface
{
  virtual void Foo() = 0;
};

template< class T >
struct UsesFunPtr
{
  UsesFunPtr()
  {
    &T::Foo;
  }
};

void DoIt()
{
  UsesFunPtr< Interface > a;
}

#pragma managed
Run Code Online (Sandbox Code Playgroud)

更新:如果我删除最后一行警告消失 - 所以按照ComicSansMs的回答:究竟是at the time of definition for the template什么时候?任何人都可以解释为什么最后一行,之后没有代码,仍然影响之前的代码?

c++ c++-cli visual-studio-2010

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

System.Transactions.Diagnostics.DiagnosticTrace抛出TypeInitializationException

似乎与OdbcConnection.Open()中出现的Strange异常有关,但我不确定.

我最近切换到Win8,从那以后没有运行这个应用程序.我正在使用VS2012,但项目尚未升级.转储异常如下所示:

Unhandled Exception: System.TypeInitializationException: 
 The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception. ---> 
 System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> 
 System.TypeInitializationException: The type initializer for 'System.Uri' threw an exception. ---> 
 System.TypeInitializationException: The type initializer for 'System.UriParser' threw an exception. ---> 
 System.TypeInitializationException: The type initializer for 'System.Runtime.Versioning.BinaryCompatibility' threw an exception. ---> 
 System.ArgumentException: String cannot be of zero length.
Parameter name: frameworkName
   at System.Runtime.Versioning.BinaryCompatibility.ParseFrameworkName(String frameworkName, String& identifier, Int32& version, String& profile)
   at System.Runtime.Versioning.BinaryCompatibility.ParseTargetFrameworkMonikerIntoEnum(String targetFrameworkMoniker, TargetFrameworkId& targetFramework, Int32& targetFrameworkVersion)
   at …
Run Code Online (Sandbox Code Playgroud)

.net c++-cli .net-4.0 windows-8

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

C++ ^它的用途是什么?

我正在阅读其他人制作的(.NET)C++程序,我无法弄清楚这意味着什么:

BinaryWriter^ file = gcnew BinaryWriter( File::Open( "Data.al", FileMode::OpenOrCreate ));
Run Code Online (Sandbox Code Playgroud)

^在这句话中做了什么?

那怎么样:

void GetEEDataRx(array<Byte> ^%EE)
Run Code Online (Sandbox Code Playgroud)

^%的目的是什么

.net c++-cli

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

c ++ cli ref类数组转换为指针

我正在尝试编写托管包装类,以便为本机类执行互操作和转换.我在我的互操作库中写了类似的东西;

namespace MyNamespace {
    public ref class MyClass {
    public:
        static void MyMethod(double myArray[]);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我从C#应用程序引用此库时,界面已更改.如果我在C#中的类F12上,我得到了这样的重新生成的接口MyClass [from metadata];

namespace MyNamespace {
    public class MyClass {
        public static void MyMethod(double myArray*);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器将数组转换为指针?如何让编译器将此参数正确地公开为数组而不是指针?

如果我想以这种方式使用该类,那么我将不得不在不安全的上下文中获取指向托管数组的指针,我不想这样做.

更新

当我typeof(double[])在C#做的时候,我得到了;

{Name = "Double[]" FullName = "System.Double[]"}
    Assembly: {mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
    AssemblyQualifiedName: "System.Double[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
    Attributes: Public | Sealed | Serializable
    BaseType: {Name = "Array" FullName = "System.Array"}
    ...}
Run Code Online (Sandbox Code Playgroud)

所以我理解这些意见表明我需要一个System.Array.但是,我的问题仍然存在,如何System.Double[]在互操作类中声明一个数组?简单地推杆MyMethod(System::Double[] myArray)不起作用......

c# c++ interop metadata c++-cli

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

从visual C++调用C#代码

基本上我需要从Visual C++代码调用C#代码.在阅读了很多关于可能方法的文章后,我决定使用C++/CLI机制.

最初我决定在C++本机代码(dll库项目)中有一些函数,它们将调用CLR项目中的一些函数,这些函数将调用C#项目中的一些函数.

在那之后,我想也许我可以摆脱桥梁项目(CLR项目),因为它只是向管理世界过渡.我认为我可以创建我的原生项目,我可以添加一个c ++源文件,我可以只为该文件而不是整个项目启用CLR支持.所以这意味着我的本机项目将只包含一个可以使用C++/CLI语法并代表桥接的文件.所有其他文件只是本机C++源文件.从设计的角度看这是对的吗?!

为了做到这一点,我想我必须将托管C#dll文件添加到C++本机dll文件的其他#using Directories属性中.问题是我不知道如何根据当前配置设置C#dll调试或发布版本的路径.

另外我知道我不能将本机C++ DLL添加到C#项目引用中.但看起来我可以在本机C++项目中添加一个C#dll作为引用.怎么会 ?!这甚至有用吗?如果我可以将C#dll添加到本机C++项目引用中,是否需要设置#using目录?

c# c++ c++-cli

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