我用C#做的组件能否给VB6.0 或者VC6.0调用?

huhong81312 2003-08-21 07:31:45
我用C#做的组件能否给VB6.0 或者VC6.0调用?如果可以应该怎么用?
...全文
68 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoyangture 2003-08-25
  • 打赏
  • 举报
回复
收藏
CBJ2049011 2003-08-25
  • 打赏
  • 举报
回复
shang qu
CBJ2049011 2003-08-24
  • 打赏
  • 举报
回复
创建的时候已经将“Register for COM Interop”设为true
程序 :
using System;

namespace TestClass
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Class1
{
public Class1()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public string getTime()
{
return DateTime.Now.ToString();
}
}
}

可是在delphi中看不到方法:public string getTime()
何解?
lidi3503 2003-08-24
  • 打赏
  • 举报
回复
studying……
zag 2003-08-24
  • 打赏
  • 举报
回复
学习...
alaisalaix 2003-08-24
  • 打赏
  • 举报
回复
参考下面资料:
http://game.ccidnet.com/tech/guide/2001/10/18/58_3495.html
http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39104307,00.htm
http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39036337,00.htm
http://www.yesky.com/20020403/1605094.shtml
http://www.ccw.com.cn/htm/app/aprog/02_2_4_3.asp
http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39144446,00.htm
alaisalaix 2003-08-24
  • 打赏
  • 举报
回复
(转载)
使用非托管代码是无法直接调用.NET类,但是微软提供了一种技术,能够利用非托管代码层来封装.NET的接口,暴露.NET 类提供的方法和属性,这样这些类就好像是一个COM对象,可以为非托管客户程序使用。实现.NET类对非托管客户代码可见,需要两个先决条件:
1.需要创建一个COM类和接口的描述。
一个COM对象的客户程序在存取对象之前,必须获得对象的描述,以便能够正确定位组件,调用其方法和属性。对于一个真正的非托管COM组件而言,可以通过类型库的形式,来描述GUIDS、类和类支持的接口(包括方法、属性、参数)。.NET 装配并不包含兼容的类型库描述信息,所以编程人员需要手工利用 .NET 提供的实用程序抽取类的装配信息,并把它转化为一个类型库文件。
TLBEXP.EXE就是一个这样的命令行程序,它可以接受一个装配动态链接库文件名参数,把它转化为一个类型库文件。使用的时候你可以根据需要对这个类型库进行命名。
下面就是利用TLBEXP从装配中创建类型库的例子:

tlbexp ComServer.dll /out:ComServer.tlb

这样就可以在当前目录下产生一个类型库文件ComServer.tlb。
一旦类型库创建后,它就可以被一个COM客户端程序引用,获得必要的信息绑定COM类的接口,在运行态激活COM类。
另外一个从装配中创建类型库文件的命令行程序是REGASM.EXE,这是一个。NET装配注册程序,除了能够创建类型库外,这个程序同时还能够在注册编辑表中创建必要的Windows注册项,把这个装配文件作为一个COM对象暴露给客户端。

2.需要对COM类和接口实现注册。
对于一个COM类要想在运行态被客户端存取,COM底层必须知道如何定位实现COM类的代码。COM底层并不知道.NET类。但是.NET提供了一个共用代理动态链接库mscoree.dll,这个库本身扮演着一个包装的角色,是COM 客户端和.NET 类的中介。
下面的命令行为COM 互操作性注册了一个装配,并产生一个类型库文件。

regasm ComServer.dll

注意:在你创建的.NET类库的dll项目中,有一个称为"Register for COM Interop",设置这个属性为true,可以指示IDE能够在每次创建时自动 注册为COM 组件的项目输出,这样你可以免除手工注册的工作,特别强调的是组件中要求输出文件中必须包含具有强名称的程序集元数据。



在Visual Basic代码中使用.Net类也很容易,你只要在IDE环境中添加对输出.NET类型库的引用,声明和创建一个.NET 类的实例,你会发现VB6 的智能感知特征就能够自动提示这个实例的属性、方法和参数。
总之,COM的互操作性,对实现托管环境和非托管环境之间的代码的重用提供了一个有效的途径。
tangjun 2003-08-23
  • 打赏
  • 举报
回复
.net组件VB6不可访问,但是COM+可以
huhong81312 2003-08-22
  • 打赏
  • 举报
回复
up
csharplove 2003-08-21
  • 打赏
  • 举报
回复
大部分的.NET程序集可通过COM访问,为了让COM客户引用.NET组件,需要为组件生成COM可调用的包装器COM-CALLABLE WRAPPER,即CCW,这个包装器由COM客户用作.NET组件的代理.当COM客户调用.NET对象时就会创建CCW.而COM组件是VB6,VC6可访问的。详情可查阅C#高级编程一书
czy412 2003-08-21
  • 打赏
  • 举报
回复
应该是不可以的,好象有什么托管不托管之分.
请高手解答把!
huhong81312 2003-08-21
  • 打赏
  • 举报
回复
up

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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