关于asp.net(vb.net)网站调用vc++的dll的问题
本人用vs2008开发工具的VC++做了一个动态dll,然后想在asp.net(VB.net)开发的网站中调用这个dll中的函数,现在的想法是把这个dll注册到com+组...
本人用vs2008开发工具的VC++做了一个动态dll,然后想在asp.net(VB.net)开发的网站中调用这个dll中的函数,
现在的想法是把这个dll注册到com+组件服务中,可是注册的时候报错,说是含有非法文件。
由于本来对com的开发完全不懂,那位可以说说怎么用vs2008来开发com+组件呀?是不是通过选项目的类型或者设置一下
什么属性就可以自动生成标准的借口呀?请指点。
还有如果不在Com+组件服务中注册,还有别的方法可以让这个asp.net的网站调用这个普通的dll吗? 展开
现在的想法是把这个dll注册到com+组件服务中,可是注册的时候报错,说是含有非法文件。
由于本来对com的开发完全不懂,那位可以说说怎么用vs2008来开发com+组件呀?是不是通过选项目的类型或者设置一下
什么属性就可以自动生成标准的借口呀?请指点。
还有如果不在Com+组件服务中注册,还有别的方法可以让这个asp.net的网站调用这个普通的dll吗? 展开
3个回答
展开全部
用 COM 当然可以。不过,COM 封装比较复杂,不太熟悉的话,出错调试很麻烦。而且要求的知识面较宽。
简单的封装可以这样实现:
1)通过 VS 创建一个 CLR 类库项目,在其中可以简单封装标准的 DLL 导出函数,当然,这些导出函数实际上是不导出。然后定义一个 .net 类,在这个类中定义对应所有导出函数的公共方法,然后在公共方法内部调用这些标准的 C++ 函数。生成这个 CLR DLL。
2)在VB中,可以引入这个 CLR DLL,然后 VB 就可以通过调用 CLR DLL 中定义的 .net 类来间接调用原来标准的 C++ DLL 导出函数了。
当然,因为在.net 中,所有的实现都是通过类来封装的,强调的是面向对象的编程理念。因此,可以将 C++ DLL 本来的导出函数封装成类。然后实例化一个全局 C++ 类,在后续定义的.net 类中,定义相关的公共方法,私有方法,在内部对这个全局的 C++ 类进行操作(这一切都是在同一个.cpp文件中就可以完成的,利用 cl 编译器的混编特性进行编译)。在客户程序,唯一要做的就是调用公共方法就 OK 了。
以下提供示例,楼主可以参考一下:
// CLR 类库项目。
// NestedCppClassDll.cpp
///////////////////////////////
// 非托管代码。
#pragma unmanaged
#pragma once
#include <stdio.h>
#include <windows.h>
class NestedCppClass {
public:
void PrintInfo() {
printf("NestedCppClass\r\n");
}
int Func(int i) {
return ++i;
}
};
NestedCppClass g_ncc;
#pragma managed
///////////////////////////////
///////////////////////////////
// 托管代码。
using namespace System;
namespace NestedCppClassDll {
public ref class OutClrClass
{
public:
void PrintInfo() {
Console::WriteLine("OutClrClass");
g_ncc.PrintInfo();
}
int Func(int i) {
return g_ncc.Func(i);
}
};
}
///////////////////////////////
'VB控制台项目。
'项目需要引入CLR DLL
'Module1.vb
Module Module1
Sub Main()
Dim c As NestedCppClassDll.OutClrClass
c = New NestedCppClassDll.OutClrClass
c.PrintInfo()
System.Console.WriteLine(c.Func(1))
End Sub
End Module
'控制台输出内容:
'OutClrClass
'NestedCppClass
'2
// C#控制台项目。
// 项目需要引入 CLR DLL。
// Program.cs
///////////////////////////////
using System;
using NestedCppClassDll;
namespace NestedCppClassApp
{
class Program
{
static void Main(string[] args)
{
OutClrClass c = new OutClrClass();
c.PrintInfo();
Console.Write(c.Func(1));
}
}
}
//控制台输出内容:
//OutClrClass
//NestedCppClass
//2
简单的封装可以这样实现:
1)通过 VS 创建一个 CLR 类库项目,在其中可以简单封装标准的 DLL 导出函数,当然,这些导出函数实际上是不导出。然后定义一个 .net 类,在这个类中定义对应所有导出函数的公共方法,然后在公共方法内部调用这些标准的 C++ 函数。生成这个 CLR DLL。
2)在VB中,可以引入这个 CLR DLL,然后 VB 就可以通过调用 CLR DLL 中定义的 .net 类来间接调用原来标准的 C++ DLL 导出函数了。
当然,因为在.net 中,所有的实现都是通过类来封装的,强调的是面向对象的编程理念。因此,可以将 C++ DLL 本来的导出函数封装成类。然后实例化一个全局 C++ 类,在后续定义的.net 类中,定义相关的公共方法,私有方法,在内部对这个全局的 C++ 类进行操作(这一切都是在同一个.cpp文件中就可以完成的,利用 cl 编译器的混编特性进行编译)。在客户程序,唯一要做的就是调用公共方法就 OK 了。
以下提供示例,楼主可以参考一下:
// CLR 类库项目。
// NestedCppClassDll.cpp
///////////////////////////////
// 非托管代码。
#pragma unmanaged
#pragma once
#include <stdio.h>
#include <windows.h>
class NestedCppClass {
public:
void PrintInfo() {
printf("NestedCppClass\r\n");
}
int Func(int i) {
return ++i;
}
};
NestedCppClass g_ncc;
#pragma managed
///////////////////////////////
///////////////////////////////
// 托管代码。
using namespace System;
namespace NestedCppClassDll {
public ref class OutClrClass
{
public:
void PrintInfo() {
Console::WriteLine("OutClrClass");
g_ncc.PrintInfo();
}
int Func(int i) {
return g_ncc.Func(i);
}
};
}
///////////////////////////////
'VB控制台项目。
'项目需要引入CLR DLL
'Module1.vb
Module Module1
Sub Main()
Dim c As NestedCppClassDll.OutClrClass
c = New NestedCppClassDll.OutClrClass
c.PrintInfo()
System.Console.WriteLine(c.Func(1))
End Sub
End Module
'控制台输出内容:
'OutClrClass
'NestedCppClass
'2
// C#控制台项目。
// 项目需要引入 CLR DLL。
// Program.cs
///////////////////////////////
using System;
using NestedCppClassDll;
namespace NestedCppClassApp
{
class Program
{
static void Main(string[] args)
{
OutClrClass c = new OutClrClass();
c.PrintInfo();
Console.Write(c.Func(1));
}
}
}
//控制台输出内容:
//OutClrClass
//NestedCppClass
//2
展开全部
个我觉得JAVA是比较有前景的,她比较适合大型的企业级开发。更重要的是JAVA是开源的,相关支持的开源资源也是相当多。
在框架方面有strust,spring,hibernate等
在服务器上可以用tomcat
在数据库上可以用mysql
相关的开发环境更有开源eclispe
再说网络中关于JAVA的教程,资源更是数不胜数
最重要的一点就是它是与平台无关的,可以在任何操作系统上运行
用JAVA可以做到从学习到
不过个人觉得有一点不足就是好像只能做一些比较专业的项目,像我自己在学校,虽然JAVA觉得挺不错的,但总有一英雄无用武之地的感觉,可能出去了会好一点吧 :(
对于.NET而言,入手相当快,再加上有一个VS,开发速度更是无可比拟
特别适合用于中小型的开发
个人觉得无论是学习JAVA还不.NET都是很有前途的,关键是学到什么水平,要是能够达到精通的级别都是前程无量的
:)
在框架方面有strust,spring,hibernate等
在服务器上可以用tomcat
在数据库上可以用mysql
相关的开发环境更有开源eclispe
再说网络中关于JAVA的教程,资源更是数不胜数
最重要的一点就是它是与平台无关的,可以在任何操作系统上运行
用JAVA可以做到从学习到
不过个人觉得有一点不足就是好像只能做一些比较专业的项目,像我自己在学校,虽然JAVA觉得挺不错的,但总有一英雄无用武之地的感觉,可能出去了会好一点吧 :(
对于.NET而言,入手相当快,再加上有一个VS,开发速度更是无可比拟
特别适合用于中小型的开发
个人觉得无论是学习JAVA还不.NET都是很有前途的,关键是学到什么水平,要是能够达到精通的级别都是前程无量的
:)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过引用调用就行,具体跟C#WinForm一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |