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

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

...全文
123 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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类包装一下。

7,539

社区成员

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

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