标签: managed-c++

在VS2008中创建64位CLR C++项目

我正在创建一个包含32位和64位版本的本机库的包装器.我有一个相当复杂的C++/CLR项目,其中包含来自本机库的许多头文件.我让它在x32上工作正常,但现在我不知道如何提供替代的x64构建.

有人可以概述创建此类项目的步骤吗?

  • 各种定义依赖于_WIN32/_WIN64,所以必须是多个项目?
  • 两个x32/x64本机库都具有相同的文件名.目前lib ref已完成#pragma comment (lib, "xxxxxx.lib").该如何改变?

最后 - VS2008只列出了Win32平台,而不是Win64(我确实安装了x64 VS2008组件).

谢谢!

64-bit managed-c++ c++-cli

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

将标准C++嵌入到.NET应用程序中

我想用标准的,独立于平台的C++编写一个算法库.

然后,我可以使用相同的C++代码并为.NET编译它,以便C#应用程序可以使用该库吗?如果没有,实现这种互操作的最简单方法是什么?

.net interop managed-c++ c++-cli visual-c++

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

编译解决方案没有DLL的Visual Studio托管C++

我是C++ Managed和Visual Studio的新手,牢记这一点.我编写了一个应用程序,使用户可以轻松地在反击中绑定密钥,可在此处找到:https: //sites.google.com/site/intrepidprojects/

我与测试程序的朋友遇到的第一个错误是"msvcr120D.dll缺失".这让我发现我必须将运行时库设置为多线程(/ MTd),如果我不希望用户下载Visual Studio c ++ dll的话.当我选择这个选项时,我得到了/ MTd和/ clr不兼容的错误.所以我将常见的运行时支持转为不支持.现在所有名称空间都是无效的,例如"系统","收藏"等.

我的问题是如何在不需要dll的情况下生成独立应用程序?我遇到的每个解决方案都会让我遇到更多我不理解的错误.同样,我使用的语言是c ++/cli.对不起如果我没有使用正确的术语来表达我的错误,我自己就是在教这个.我知道这个问题之前已被多次提出过,但答案并没有引导我找到解决方案.

dll managed-c++ visual-studio-2013

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

使用 cmake 将 clr 支持设置为 true

我正在尝试使用 cmake 生成托管 C++ 代码。下面是我添加的脚本

 SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "/clr") 
 STRING(REPLACE "/EHsc" "/EHa" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
 STRING(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /clr")  
Run Code Online (Sandbox Code Playgroud)

它没有将 clrsupport 设置为 true。我们如何做 cmake。

-swetha

clr managed-c++ cmake

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

如何在托管 C++ 中正确实现带有事件的 C# 接口

您好,我正在尝试在我的托管 C++ dll 中实现 C# 接口,如下所示:

public ref class MyClass : public IMyInterface 
{
 // Inherited via IMyInterface
 virtual event EventHandler<MyEventArgs ^> ^ MyLoadedEvent;

 public:
     virtual event EventHandler<MyEventArgs ^> MyLoadedEvent 
                {
                    void add(MyEventArgs ^ f)
                    {
                      // some magic
                    }
                    void remove(MyEventArgs ^ f)
                    {
                      // some magic
                    }
                }
}
Run Code Online (Sandbox Code Playgroud)

但我不断收到两个错误:

1) 事件类型必须是句柄到委托类型

2) 类未能实现在...dll 中声明的接口成员函数“MyLoadedEvent::add”

我在实现中缺少什么或者实现接口事件的正确方法是什么?

谢谢!

c# c++ managed-c++ c++-cli visual-c++

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

如何将IntPtr转换为流?

class Foo
{
   static bool Bar(Stream^ stream);
};

class FooWrapper
{
   bool Bar(LPCWSTR szUnicodeString)
   {
       return Foo::Bar(??);
   }
};
Run Code Online (Sandbox Code Playgroud)

MemoryStream将采取一个,byte[]但我想这样做,如果可能的话不复制数据.

.net c++ interop managed-c++

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

你能从非托管C++类派生一个托管C++类吗?

我有一个无人管的C++类,我用无人的dll编写.我有一个托管的dll引用了非托管的dll.托管dll中的类可以从非托管类派生吗?

使用Visual Studio 2008

managed-c++ unmanaged c++-cli visual-c++

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

'This'指针和Vtable函数之间的关系

我对虚拟表的功能并不太了解,但是在下面粘贴的代码中 - this传递的指针明显指向2种情况下的不同位置 - 但是show()内存中的函数- 是实例化/意味着单独创建的运行时的每个对象?(原谅我对C++术语的不了解)

#include<iostream>
using namespace std;
class A
{
      int x;
      public:
            A(){x=0;}
            A(int z){x=z;}
            void show()
            {  
                 if(x==0)
                 cout<<"\nCalled by OBJ_1";
                 else
                 cout << "\nCalled by OBJ_2";
            }
};

int main()
{
 A OBJ_1,OBJ_2(1);
 OBJ_1.show();
 OBJ_2.show();
}
Run Code Online (Sandbox Code Playgroud)

如果可以提供关于虚拟表如何工作的示例(如果可能的话有一些存储器图)并且this可以解释虚拟表的指针功能,我将非常感激.

c++ managed-c++ visual-c++ c++11

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

在C#或VC++中导入MinGW C++ DLL

我有一个带源代码的MinGW DLL(~20k行),我需要在CLR中使用这个DLL中的一些类.起初我尝试为C++类编写Manged C++包装类(我刚刚从源代码中复制)并从C#引用这个类.但是VC++编译器和MinGW存在差异,因此本机代码会编译出一些错误!我对C++和ASM没有太大的经验,但却产生了一些麻烦.

告诉我们,有没有办法在VC++或C#中导入MinGW类?

UPD:

MingGW和VC++的区别:

  1. ASM调用代码就好

asm("fnstcw %0\n" : "=m" (cw) : : "memory");
asm("fldl (%0)\n": : "r"(x): "st(7)"); };
asm("fstps (%0)\n": : "r"(x): "memory", "st");

不在VC++中编译.我从未编写过比MOV AX,BX更难的汇编代码:)

  1. 它还执行fortran代码,我不明白如何:)

.net c# managed-c++ mingw visual-c++

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

.NET C++内存使用旧语法泄漏?

我正在处理我的应用程序中的内存泄漏问题.我将其缩小为旧语法以声明'Single'类型.使用声明创建了一个测试应用程序,它在吃掉大量内存后崩溃了.我错过了什么?

测试代码在这里:

#include "stdafx.h"

using namespace System;

int main()
{
    while(1)
    {
        System::Single * sngTemp =  new System::Single(0.0);
        //System::String  ^sngTemp =  gcnew System::String(S"dsfasdfasdf");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

.net c++ syntax memory-leaks managed-c++

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