用vc++.net创建一个.net类库dll,能否在其中使用mfc类?

mstlq 2005-05-08 08:01:23
如题!
小弟做了一个mfc的dll。
想用vc#调用其中的类,不成功。
想把dll改成.net类库型的。用vc++.net创建一个.net类库dll,能否在其中使用mfc类?
我知道这种想法很傻,但由于时间紧迫,来不及重写代码,所以……
在此求助,望有兄弟能拉我一把。
谢谢!

...全文
116 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mstlq 2005-05-09
  • 打赏
  • 举报
回复
谢谢这位兄弟,您说的方法我之前试过,不过还有一个问题解决不了。
就是我的dll里有几个导出类是含有mfc成员的,这样的话,它们不能声明为托管类,也不能写在namespace里面,请问有解决办法让c#也能使用此类吗?
ham235 2005-05-09
  • 打赏
  • 举报
回复
可以:
在用VC++实现的.NET类库中作如下设置:
1. 在stdafx.h中包含如下(从一个MFC DLL项目中COPY):
// stdafx.h : 标准系统包含文件的包含文件,
// 或是常用但不常更改的项目特定的包含文件
//

#pragma once

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif

// 如果您必须使用下列所指定的平台之前的平台,则修改下面的定义。
// 有关不同平台的相应值的最新信息,请参考 MSDN。
#ifndef WINVER // 允许使用特定于 Windows 95 和 Windows NT 4 或更高版本的功能。
#define WINVER 0x0400 // 将此更改为针对于 Windows 98 和 Windows 2000 或更高版本的合适的值。
#endif

#ifndef _WIN32_WINNT // 允许使用特定于 Windows NT 4 或更高版本的功能。
#define _WIN32_WINNT 0x0400 // 将此更改为针对于 Windows 2000 或更高版本的合适的值。
#endif

#ifndef _WIN32_WINDOWS // 允许使用特定于 Windows 98 或更高版本的功能。
#define _WIN32_WINDOWS 0x0410 // 将此更改为针对于 Windows Me 或更高版本的合适的值。
#endif

#ifndef _WIN32_IE // 允许使用特定于 IE 4.0 或更高版本的功能。
#define _WIN32_IE 0x0400 // 将此更改为针对于 IE 5.0 或更高版本的合适的值。
#endif

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将为显式的

#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展

#ifndef _AFX_NO_OLE_SUPPORT
#include <afxole.h> // MFC OLE 类
#include <afxodlgs.h> // MFC OLE 对话框类
#include <afxdisp.h> // MFC 自动化类
#endif // _AFX_NO_OLE_SUPPORT

#ifndef _AFX_NO_DB_SUPPORT
#include <afxdb.h> // MFC ODBC 数据库类
#endif // _AFX_NO_DB_SUPPORT

#ifndef _AFX_NO_DAO_SUPPORT
#include <afxdao.h> // MFC DAO 数据库类
#endif // _AFX_NO_DAO_SUPPORT

#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT


2.修改项目设置:
常规-MFC使用:在共享DLL中使用MFC

示例类:
// TestNetMFC.h

#pragma once

using namespace System;

namespace TestNetMFC
{
public __gc class Class1
{
// TODO: 在此添加此类的方法。
public:
System::String* Test(){
CString str="This is a test";
return new System::String(str);
}
};
}

在C#中调用此类的方法同使用普通的.NET类一样。
onlytiancai 2005-05-09
  • 打赏
  • 举报
回复
我怎么看着vc的代码这么不好看呀
ham235 2005-05-09
  • 打赏
  • 举报
回复
写一个.Net的类把原MFC类包装一下。
如果您在此处下载压缩包,还要请您联系作者邮箱:cnaulee@gmail.com =========================== 综述: VC++通用GIS功能开发解决方案》源代码是基于VC++6.0 MFC ,在Win2000平台上开发的。界面部分用到了较低版本的 CJ60Lib 开放源码库,用户可自行替换高版本或其他界面库,它不作为本方案的商业部分。 《VC++通用GIS功能开发解决方案》源代码是迄今为止公开提供的最全面、最完善的开发GIS产品的一套基础解决方案。它的界面十分友好和具人性化,它传承了“VC++界面一揽子解决方案”(http://summerplq.51.net)最具经典的界面个性,并融合了该产品自身特有的亮点。它的功能部分解决了GIS开发的诸多普遍问题和关键技术(如数据结构,地图显示,基于DEM的地形分析等),可适用于城市规划、地质勘探、土地丈量、水利枢纽、农田建设,乃至其他构建于城市图和地形图之上的GIS软件开发。可以说,它的基本功能方面已相当成熟。 《VC++通用GIS功能开发解决方案》是一套内容十分丰富的“教科书”,相对应于各个编程段的程序员来说都有合适的学习内容。源程序条理清晰,模块化设计,普遍采用注释,对于入门和初级程序员来说,可以拆分支解开来学习;对于开发级程序员来说,它提供了丰富的功能实现,省却了您金钱和时间的浪费;作为专业级的程序员来说,或许你可以从中找到另一条安全、快捷的编程思路,从而解决你在诸如方案设计,数据构建,分析实现上的困惑。 目前1.0版本:不带数据库,不带查询功能,不带投影变换功能。 方案内容: ============================================ 一、用户界面和控制 ------------------------------------ 1、实现全彩启动画面,令你程序增色不少; 2、实现软件启动口令设置。积作者多年经验完善而成,口令加密技术先进; 3、实现全屏功能,通过TAB键方便地互相切换; 4、实现人性菜单按钮,有工具栏纹理、文字、菜单图标,以及右键菜单功能; 5、实现视图窗口位图背景; 6、实现状态栏信息功能,显示坐标和高程; 7、实现对话框按钮个性化,平面加图标,自己琢磨还有更多效果; 8、实现发送邮件和访问主页功能; 9、实现真彩位图,图标,光标大应用,你可以在软件中发现大量真彩技术的应用; 10、实现树目录复选图标,彻底解放图层控制。 ! 更多细节请参考“VC++界面一揽子解决方案”3.0v(http://summerplq.51.net) 二、功能实现部分 -------------------------------- 1、数据格式公开透明,这在源代码中是显而易见的。数据源还可以通过Mapinfo中间格式转换过来!一旦你有了源代码,自己就可以编写出该转换软件,当然也可以购买我们提供的该软件。 2、地图显示(显示、漫游、放大、缩小)。 # 地图显示方式采用了图层控制技术,让你点击树目录中的“小眼睛”就可以方便地实现图层的开关显示。操作时图形不闪烁,结合“存档”功能,你还能保存你的设置! # 漫游采用无边际方式,任意漫游!同时结合“存档”功能,保存地图显示位置! # “放大”和“缩小”都同时采用两种方式:定点缩放和拉框缩放!拉框缩放采用了光栅绘图模式,效果自然漂亮! 3、九大GIS分析功能(基于DEM) #量算多点距离#计算线段最大坡度#计算区域面积#计算区域高程#两点通视#中心通视# #区域坡度图#断面图#区域通行分析 全部分析采用实时数据显示(操作同时显示结果)技术,配以最后结果显示。 几点说明: ============================================= 1、考虑到数据量大小问题,本方案只带了一幅示例数据,但已经足够用!又由于该样图来自于原来四幅图中,而本方案所用到的引擎文件也没有作相应改变,所以点程序中的“全图”功能后,该幅图只占了客户区的一角,而不是将该幅图放满客户区。这不影响其它任何操作,不是程序有问题。 2、本程序不提供更多数据!但我们提供将Mapinfo中间格式数据(即.mif格式)转换到本程序数据格式的软件。所以说,您做的城市图也可以放进来用。 3、本程序所用符号库(所谓符号库,即指地图中的点、线、面符号;如高程点,道路,植被等。)采用了封装的动态链接库DLL_study4R.dll,主要是因为该符号库是商业符号库(欲知其详细内容,请留意本人主页日后将刊登的介绍,大体上它包括了所有地形图符号以及城市图符号(如教育机构符号等))。 4、本程序由于CJ60Lib库版本问题而不适合.NET平台,但不是本程序自身问题!用户可以替换掉CJ60Lib库改用支持.NET的版本或其他界面库,或者索性弃用!这不影响程序其他实质部分。 5、补充:今后将推出基于DEM数据生成三维图功能(将作为单独模块提供)。
================================================================================ MICROSOFT 基础: GameClient 项目概述 =============================================================================== 应用程序向导已为您创建了此 GameClient 应用程序。此应用程序 不仅介绍了使用 Microsoft 基础的基本知识, 而且是编写应用程序的起点。 此文件包含组成 GameClient 应用程序的每个文件的内容摘要。 GameClient.vcproj 这是使用“应用程序向导”生成的 VC++ 项目的主项目文件。 它包含有关生成文件的 Visual C++ 版本的信息,以及 有关用“应用程序向导”所选择的平台、配置和 项目功能的信息。 GameClient.h 这是应用程序的主头文件。 它包含其他 项目特定的头文件(包括 Resource.h),并声明 CGameClientApp 应用程序。 GameClient.cpp 这是包含应用程序 CGameClientApp 的主应用程序源文件。 GameClient.rc 这是程序使用的所有 Microsoft Windows 资源 的列表。 它包含存储在 RES 子目录中 的图标、位图和光标。 可直接在 Microsoft Visual C++ 中编辑此文件。 项目资源包含在 2052 中。 res\GameClient.ico 这是一个图标文件,用作应用程序的图标。 此 图标包含在主资源文件 GameClient.rc 中。 res\GameClient.rc2 此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。 ///////////////////////////////////////////////////////////////////////////// 应用程序向导将创建一个对话框: GameClientDlg.h、GameClientDlg.cpp - 对话框 这些文件包含 CGameClientDlg 。 此定义 应用程序主对话框的行为。 此对话框的模板包含在 GameClient.rc 中,而此文件可以在 Microsoft Visual C++ 中进行编辑。 ///////////////////////////////////////////////////////////////////////////// 其他功能: ActiveX 控件 应用程序支持使用 ActiveX 控件。 ///////////////////////////////////////////////////////////////////////////// 其他标准文件: StdAfx.h、StdAfx.cpp 这些文件用于生成名为 GameClient.pch 的预编译头文件 (PCH) 和名为 StdAfx.obj 的预编译型文件。 Resource.h 这是标准头文件,它定义新资源 ID。 Microsoft Visual C++ 将读取并更新此文件。 ///////////////////////////////////////////////////////////////////////////// 其他说明: 应用程序向导使用“TODO:” 来指示 应添加或自定义的源代码部分。 如果应用程序在共享 DLL使用 MFC,且应用程序使用的语言不是 操作系统的当前语言,则需要从 Microsoft Visual C++ 光盘上 Win\System 目录下将相应的本地化资源 MFC70XXX.DLL 复制到计算机的 system 或 system32 目录下, 并将其重命名为 MFCLOC.DLL。 (“XXX”代表 语言缩写。 例如,MFC70DEU.DLL 包含翻译成 德语的资源。) 如果不这样做,应用程序的某些 UI 元素 将保留为操作系统的语言。 /////////////////////////////////////////////////////////////////////////////

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧