迁移VC++6.0 Dll到VC++2010 Dll中的问题[英] Issue in migration of VC++6.0 Dll to VC++2010 Dll

问题描述

我有一个项目,它是在 VC++6.0 中创建的.这个项目有一个 exe 文件和 5 个 dlls 文件.

该项目是从 VC++6.0 迁移到 Visual Studio 2010.现在 exe 在 C# 2010 中,Dll 在 VC++ 2010 中.

我的问题是,我必须在 C# exe 中访问 VC++ dll 的类成员变量,因此在 VC++ dll 的类中,我在头文件中添加了"ref".

下面是VC++ 2010 dll的代码片段

ShipInfo.h代码(头文件)

命名空间 ShipInfoDllNamespace
{
公共参考类 ShipInfo
{
私人:
静态浮动 m_fDirection;
}

ShipInfo.cpp代码(源文件)

命名空间 ShipInfoDllNamespace
{
浮动 ShipInfo::m_fDirection;
}


现在如果添加了"ref",那么我会收到错误消息——

错误 C3366: ''ShipInfoDllNamespace::ShipInfo::m_fDirection'' : 托管类型的静态数据成员必须在类定义中定义

-----------------------------------------------------------------------
如果我删除"ref"则没有错误,但是我无法访问 C# exe 类中的 VC++ Dll 成员变量.

谁能建议我如何解决这个问题.在此先感谢.

推荐答案

在非托管 C++ 中,类的静态数据成员必须在文件范围内初始化,而在 C++ 中您必须在类本身中执行相同操作/CLI

检查这个:
http://msdn.microsoft.com/en-us/library/27tfb08h.aspx[^]

另请查看这篇文章以了解 mangaed c++ 的介绍.挺好的.
C++/CLI in Action - 实例化 CLI 类[^]

您不是从 VC++6.0 迁移到 VC++ 2010,您是在迁移:1) 从原生平台到 CLR 平台 由 .NET 实现;2) 不是从一个版本的 C++ 到另一个版本,而是从一种语言到另一种非常不同的语言,称为 C++/CLI.

恐怕你没有意识到这两个事实中的一个或两个.

恐怕您可能没有意识到您不必迁移到 .NET.你可以留在原生平台;在这种情况下,您的项目将几乎是向后兼容的(如果您的遗留代码中没有任何愚蠢的东西);项目的转换将自动完成.

所以,我建议你要么继续使用原生开发和 C++,要么学习 .NET 和 C++/CLI(或其他一些 .NET 语言),但你可能需要从头开始.CLR 平台与 Windows 非常不同:它是面向对象的、托管的、基于 JIT 编译的等等.对于 Windows 和 C++ 开发来说,飞跃是相当大的.(对于习惯于其他一些语言和系统的开发人员来说,这将更加自然;例如,来自 Ada、Delphi Pascal 等.)

—SA

本文地址:https://www.itbaoku.cn/post/1395200.html