标签: c++-cli

在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++/CLI泛型,在数组<>和其他集合中使用T.

我正在用C++/CLI(VS2008)编写一个泛型类来存储和管理不同类型的记录,我需要集合来保存它们,然后再将它们刷新到DB/disk/etc. 我在考虑这样的事情:

ref class Record
{
    // ...
};

generic<typename T>
where T : Record, gcnew()
public ref class Factory
{
public:
    // ....functions....
protected:
    array<T^> ^    StoredData;
};
Run Code Online (Sandbox Code Playgroud)

当然,错误C3229失败了(不允许对泛型类型参数进行间接).如果我删除'^',则错误是C3149(此处不能使用此类型而没有顶级'^').这很容易在VB.Net中完成(事实上,我正在迁移现有的VB.Net类!),但在C++中,我似乎已经走到了死胡同.这在C++/CLI中实际上是不可能的吗?

提前致谢.

generics collections c++-cli

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

C++/CLI .ToString()返回错误

我是C++/CLI的初学者,因为我来自C#背景.我目前正在编写一些本机C++代码的包装器.我有以下方法:

    void AddToBlockList(System::String^ address)
    {
        char* cAddress = (char*)(void*)Marshal::StringToHGlobalAnsi(address);
        _packetFilter->AddToBlockList(cAddress);
    }

    void AddToBlockList(IPAddress^ address)
    {
        char* cAddress = (char*)(void*)Marshal::StringToHGlobalAnsi(address.ToString());
        _packetFilter->AddToBlockList(cAddress);
    }
Run Code Online (Sandbox Code Playgroud)

...第一种方法工作正常,并将我的字符串转换为字符数组.但是,IPAddress对象作为签名的第二个函数给出了以下错误:

error C2228: left of '.ToString' must have class/struct/union
Run Code Online (Sandbox Code Playgroud)

......当我输入时

? address.ToString() 
Run Code Online (Sandbox Code Playgroud)

...在命令窗口中,打印IP地址.不知道我哪里出错了.有任何想法吗?

c++-cli

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

'System :: String ^'在C++中的含义是什么?

可能重复:
插入符号在C++/CLI中的含义是什么?

System::String是一个班级.额外的插入符是什么意思?

System::String^ productString = L"";
Run Code Online (Sandbox Code Playgroud)

谁看过这个吗?我在Stroustrop找不到任何东西.

.net language-features c++-cli visual-c++

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

c ++/cli包装问题

是否有推荐的方法用c ++ cli包装本机c ++库?

c++-cli

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

如何将“ System :: String ^”转换为“ TCHAR”?

在这里问了一个涉及C ++和C#通信的问题。问题得到解决,但导致了新问题。

这将返回一个字符串(C#)

return Marshal.PtrToStringAnsi(decryptsn(InpData));
Run Code Online (Sandbox Code Playgroud)

这需要一个TCHAR *(C ++)

lpAlpha2[0] = Company::Pins::Bank::Decryption::Decrypt::Decryption("123456");
Run Code Online (Sandbox Code Playgroud)

我已经用谷歌搜索了如何解决这个问题,但是我不确定为什么字符串上有一个胡萝卜(^)。最好将String的返回值更改为C ++可以接受的其他值吗?还是我需要在分配值之前进行转换?

casting c++-cli tchar visual-studio-2010 visual-c++

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

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

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

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

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

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

为什么我的Resharper NUnit会话停止工作,但在调试模式下工作

我正在使用ReSharper来运行在C#/ NUnit中开发的单元测试.当我对C++/CLI类进行单元测试时,我的所有测试都会通过,但随后弹出以下消息框; "任务运行者应用程序已停止工作".我正在测试的类没有任何不受管理的东西:

    public ref class MyClass
    {    
  public:
        MyClass(        
        array<double>^ rawPrices,
        array<DateTime>^ priceDates)
    {
// some unmanaged C++ code runs here
} 
(snip)
    ~MyClass()
    {
    }

  private:
        int numDays;
        array<double>^ Prices;
        array<double>^ Discounts;
    };
Run Code Online (Sandbox Code Playgroud)

当所有测试都成功时,会弹出消息.但是,当我切换到调试单元测试时,测试才成功.我正在测试的库是在Release x64模式下编译的.

这种奇特的行为是否表明MyClass有问题?

c# resharper unit-testing c++-cli visual-studio-2010

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

在C++/CLI中#pragma managed(push,on)和#pragma managed(push,off)?

#pragma managed(push, off)和之间有什么区别#pragma managed(push, on)

当我们需要使用#pragma managed(push, on)而不是#pragma managed(push, off)

c++-cli pragma

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

从C++/CLI项目导出本机类型

如何导出C++/CLI项目中定义的本机类的方法?这就是我所拥有的:

.h文件:

#pragma once

#ifdef COMPILE_PRODUCER_LIB
  #define PRODUCER_LIB_EXPORT __declspec(dllexport)
#else
  #define PRODUCER_LIB_EXPORT __declspec(dllimport)
#endif

public class PRODUCER_LIB_EXPORT MySecondNativeClass {
public:
  MySecondNativeClass(int val);

  int getValue() const;

private:
  int m_value;
};
Run Code Online (Sandbox Code Playgroud)

.cpp文件:

#include "stdafx.h"
#include "MySecondNativeClass.h"

MySecondNativeClass::MySecondNativeClass(int val) {
  this->m_value = val;
}

int MySecondNativeClass::getValue() const {
  return this->m_value;
}
Run Code Online (Sandbox Code Playgroud)

在同一个项目中使用此类工作正常,但在另一个(C++/CLI)项目中使用它会给我"未解析的外部符号"链接器错误.(COMPILE_PRODUCER_LIB是仅在包含类的项目中定义的预处理器定义.)

我已经创建了一个小的解决方案(针对Visual Studio 2010),它显示了问题(在本页末尾下载).在那里,本机类MySecondNativeClass在项目"ManagedProviderLib"中定义,并在"ExternalTestClass.cpp"中使用(在项目"ManagedExternalLib"中).

c++-cli dllexport visual-c++

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