VC2010无法正常使用VB2005编写的DLL 把vb的dll做成com封装或者在c++里面打开对托管的支持。然后直接引用它 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <ComVisible(True)>Public Class Class1 Public Function dlltest1() As String dlltest1 = "HELLO WORLD" End FunctionEnd Class 在MFC项目中使用托管扩展支持托管扩展.NET FrameWork提供的托管扩展支持确保了在MFC项目支持托管扩展(CLR),开发者可以使MFC工程(本文我们将使用Test作为工程名称)通过打开项目的托管扩展属性开关,来增加编译器的托管支持(如图1)。images/radnet_001.jpg(图1:打开托管编译支持开关)对偶 .NET 对象在打开托管扩展编译开关以后,您就可以在MFC项目中使用托管对象了,通常的做法是:为每个重要的MFC对象匹配一个托管对象以形成一个对偶对,彼此匹配的对象包含指向对方的指针,这样,其他.NET对象可以通过对偶对中的.NET对象操作MFC对象;而其他MFC对象可以通过对偶对中的MFC对象操作.NET对象(如图2)。images/radnet_002.jpg(图2:对偶托管对象)在Visual Studio .NET 中,没有提供关于添加托管C++类对象的向导,因此,你可以先添加一个基于托管C++的Component对象(如图3)。images/radnet_003.jpg(图3. Add Class向导:增加托管C++ Component对象)添加了该testDocObject托管组件对象之后,将该对象的基类改为Object,并删除一些代码得到一个最小托管类:namespace test{ __gc public class testDocObject : public Object { public: testDocObject(void) { } };}经过以上步骤,Visual Studio.NET生成的代码被装进了MFC程序,当然完全可以手动创建.h文件和.cpp文件,输入相应的代码,然后把它们添加到当前工程。由于以上步骤在托管扩展编程中经常遇到,因此,将上述过程自动化是必要的,有鉴于此,我们在附赠的光盘中提供了完整的添加.NET对象的Wizard。在MFC非托管类中定义托管成员变量在MFC类中使用托管对象,提供对象的声明和初始化方法与传统的方法略有不同。以在文档类CtestDoc中添加一个托管成员变量为例,声明托管对象的代码如下:public: gcroot<test::testDocObject*> m_ptestDocObj;gcroot类型安全包装模板可以将托管参考类型指针作为成员变量嵌入到非托管类中,该变量就可以像其他类型的变量一样使用了。在CtestDoc的成员函数InitialDocument中创建这个对象,代码如下:BOOL CtestDoc::InitialDocument(){ #pragma push_macro("new") #undef new m_ptestDocObj = new test::testDocObject(); #pragma pop_macro("new")}由于testDocObject是一个托管参考类型,它总被分配在CLR堆上,所以自然不能使用在afx.h中定义的new操作符来直接初始化该对象以避免该托管对象在非托管的本地C++堆上创建导致的错误。在托管对象中声明MFC对象,与常规方法一致。掌握了上述的基本托管类和对象在传统MFC项目中的对偶使用方法,就可以保证您充分使用.NET框架所提供的丰富的类库支持(引用相关的动态链接库并声明名称空间是必要的)。如果希望更多地了解托管和非托管C++代码混用的技术,可以参考Tom Archer与Nishant Sivakumar合著,由Addison Wesley出版社出版的《Extending MFC Applications with the .NET Framework》一书,相信会很有帮助。 error C3083: “Windows”:“::”左侧的符号必须是一种类型 site:bbs.csdn.netsolve:在项目的属性 点击左侧树形控件最上面的节点(英文是 Common Properties).就到了框架和引用界面(Framework and References).右侧有添加引用按钮. 点击打开引用添加界面.如果有clr支持,上面应该有.net这个tab页, 在tab里面找你引用的命名空间.不一定是哪个, 多引用几个总会对的.一般来说 要么是 System::Windows::Forms 要么 是 System::Windows; 求一个SDK的精简的连接到sql数据库的示例代码 关于COM 组件签名后发网站 VC的LL如果通过参数向VB传数据? 怎么删除excel中的一行数据? 高手进来看看 郁闷的要死人了。。 来的都有分, 求photoshop中自由变换功能的算法!! 对于ASSERT的一点疑问? 主线程外加两个辅线程的程序的退出问题!! MAC帧长度填充问题 为何在 .dll 里使用 MessageBox() 和 fopen() 均无效? 大学生毕业咨询系统怎么做???
Public Class Class1
Public Function dlltest1() As String
dlltest1 = "HELLO WORLD"
End Function
End Class
支持托管扩展
.NET FrameWork提供的托管扩展支持确保了在MFC项目支持托管扩展(CLR),开发者可以使MFC工程(本文我们将使用Test作为工程名称)通过打开项目的托管扩展属性开关,来增加编译器的托管支持(如图1)。
images/radnet_001.jpg
(图1:打开托管编译支持开关)
对偶 .NET 对象
在打开托管扩展编译开关以后,您就可以在MFC项目中使用托管对象了,通常的做法是:为每个重要的MFC对象匹配一个托管对象以形成一个对偶对,彼此匹配的对象包含指向对方的指针,这样,其他.NET对象可以通过对偶对中的.NET对象操作MFC对象;而其他MFC对象可以通过对偶对中的MFC对象操作.NET对象(如图2)。
images/radnet_002.jpg
(图2:对偶托管对象)
在Visual Studio .NET 中,没有提供关于添加托管C++类对象的向导,因此,你可以先添加一个基于托管C++的Component对象(如图3)。
images/radnet_003.jpg
(图3. Add Class向导:增加托管C++ Component对象)
添加了该testDocObject托管组件对象之后,将该对象的基类改为Object,并删除一些代码得到一个最小托管类:
namespace test
{
__gc public class testDocObject
: public Object
{
public:
testDocObject(void)
{
}
};
}
经过以上步骤,Visual Studio.NET生成的代码被装进了MFC程序,当然完全可以手动创建.h文件和.cpp文件,输入相应的代码,然后把它们添加到当前工程。由于以上步骤在托管扩展编程中经常遇到,因此,将上述过程自动化是必要的,有鉴于此,我们在附赠的光盘中提供了完整的添加.NET对象的Wizard。
在MFC非托管类中定义托管成员变量
在MFC类中使用托管对象,提供对象的声明和初始化方法与传统的方法略有不同。以在文档类CtestDoc中添加一个托管成员变量为例,声明托管对象的代码如下:
public:
gcroot<test::testDocObject*> m_ptestDocObj;
gcroot类型安全包装模板可以将托管参考类型指针作为成员变量嵌入到非托管类中,该变量就可以像其他类型的变量一样使用了。在CtestDoc的成员函数InitialDocument中创建这个对象,代码如下:
BOOL CtestDoc::InitialDocument()
{
#pragma push_macro("new")
#undef new
m_ptestDocObj = new test::testDocObject();
#pragma pop_macro("new")
}
由于testDocObject是一个托管参考类型,它总被分配在CLR堆上,所以自然不能使用在afx.h中定义的new操作符来直接初始化该对象以避免该托管对象在非托管的本地C++堆上创建导致的错误。在托管对象中声明MFC对象,与常规方法一致。
掌握了上述的基本托管类和对象在传统MFC项目中的对偶使用方法,就可以保证您充分使用.NET框架所提供的丰富的类库支持(引用相关的动态链接库并声明名称空间是必要的)。如果希望更多地了解托管和非托管C++代码混用的技术,可以参考Tom Archer与Nishant Sivakumar合著,由Addison Wesley出版社出版的《Extending MFC Applications with the .NET Framework》一书,相信会很有帮助。
solve:
在项目的属性 点击左侧树形控件最上面的节点(英文是 Common Properties).
就到了框架和引用界面(Framework and References).右侧有添加引用按钮. 点击打开引用添加界面.如果有clr支持,上面应该有.net这个tab页, 在tab里面找你引用的命名空间.
不一定是哪个, 多引用几个总会对的.
一般来说 要么是 System::Windows::Forms 要么 是 System::Windows;