关于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吗?
展开
 我来答
silvergingko
2011-01-28 · TA获得超过5945个赞
知道小有建树答主
回答量:688
采纳率:0%
帮助的人:870万
展开全部
用 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
nphccx
2011-01-28 · TA获得超过3938个赞
知道小有建树答主
回答量:1145
采纳率:0%
帮助的人:981万
展开全部
个我觉得JAVA是比较有前景的,她比较适合大型的企业级开发。更重要的是JAVA是开源的,相关支持的开源资源也是相当多。
在框架方面有strust,spring,hibernate等
在服务器上可以用tomcat
在数据库上可以用mysql
相关的开发环境更有开源eclispe
再说网络中关于JAVA的教程,资源更是数不胜数
最重要的一点就是它是与平台无关的,可以在任何操作系统上运行
用JAVA可以做到从学习到
不过个人觉得有一点不足就是好像只能做一些比较专业的项目,像我自己在学校,虽然JAVA觉得挺不错的,但总有一英雄无用武之地的感觉,可能出去了会好一点吧 :(

对于.NET而言,入手相当快,再加上有一个VS,开发速度更是无可比拟
特别适合用于中小型的开发

个人觉得无论是学习JAVA还不.NET都是很有前途的,关键是学到什么水平,要是能够达到精通的级别都是前程无量的
:)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
黄河风土
2011-01-28 · 超过10用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:36.5万
展开全部
通过引用调用就行,具体跟C#WinForm一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式