C#写好的类,一个dll文件,如何修改可以被别的代码入vb引用 我用C#写好了一个类,借口明确,现在封成一个dll类文件,如何修改可以通过注册让别的代码(如vb)直接引用呢?望各位大侠不吝赐教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 只要对方开个接口,跟你的DLL文件名字一样,引用下就可以了 http://www.vbtonet.com/user-guide-appendix/add-com/Imports System.Runtime.InteropServices[ComVisible(true)][ProgId("Project1.Class1")][ClassInterface(ClassInterfaceType.AutoDual)]public class Class1{public void method1(){ MessageBox.Show("hello world", Application.ProductName);}}} 你在你的DLL中留有接口函数,他在VB中或者其它任何的程序中都可以引用了,把你的接口函数告诉他,写清楚函数名、参数类型等说明,直接导入就OK 借口函数都留好了,只是在vb中如何引用呢?是不是该先生成一个类型库啊,然后还有注册一下类型库,最好是像COM组件那样引用 开个接口,名字一样是什么意思?不太明白哦,可不可以把这个dll弄成一个和com组件差不多的东西呢,好像可以做成一个类型库,然后注册一下就可以直接添加了但具体操作有问题哦 如果是VB.NET使用的话,就直接引用就可以了。VB使用的话,需要反包装一下。 http://developer.51cto.com/art/200908/141798.htm这上面的方法真的很适合我的需求,但是我执行到2.1生成tlb类型库这一步时,总是提示TlbExp :error TX0000:不支持给定路径的格式 我的DLL类是用C#写的,现在想让他通用起来,就是让VB6,或者VB.NET不论哪一个,都可以引用这个DLL类,小弟以前没弄过,真的是比较茫然,大侠们帮帮忙,写的详细点,越详细越好,小弟在这里跪求~~~~ 1. 创建.NET class//注意1:COM 不支持static方法//注意2:提供一个Interface Attribute标明InterfaceType特性为IDispatch// 一个实现类 Attribute标明ComSourceInterfaces是实现这个Interface的。// 这样COM用的时候,这个类能智能感知出里面所提供的方法。//注意3:方法需要标明:ComVisible为true,否则不会为该方法包装。namespace MyDLL_COM{ [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] [ComVisible(true)] public interface IDirectory4COM { string[] GetAllFiles(string directory); } [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces((typeof(IDirectory4COM)))] [ComVisible(true)] public class Directory4COM2 : IDirectory4COM { [ComVisible(true)] public string[] GetAllFiles(string directory) { return Directory.GetFiles(directory); } }}2. 工程属性>Build选项卡>Output>Register for COM interop需要选上会为该dll包装并注册。等同如下(手动调用regasm工具,进行COM注册) c:\windows\Microsoft.NET\Framework\v2.0.50727\regasm D:\Fillex\VS2008Projects\CSDNAnswer\MyDLL_COM\bin\Debug\MyDLL_COM.dll但上面工程属性设定后,无需手动调用注册工具。3. VB端调用我用的VBA进行的测试:Tools > Reference > 选择MyDLL_COM (能看到这个引用,说明前一步注册是成功的)Private Sub CommandButton1_Click() Dim i As Integer Dim b As MyDLL_COM.Directory4COM2 Set b = New MyDLL_COM.Directory4COM2 str = b.GetAllFiles("D:\Test") For i = 1 To UBound(str) Cells(i, 2) = str(i) Next End Sub 在线请教,关于picturebox上写字的问题 数据时时更新 关于bitmap类与image类的用法与区别? c#datagridview如何删除鼠标所选的数据所在的行 在C#用什么措施访问不同的局域网上的SQL Server 2000 图象高手来救急:关于只修改图象dpi,不改变图象的方法 c#md5加密问题 建立了一个视频研讨组,希望大家积极参与讨论啊。 为什么我在本地化读取资源时,只能读英语而不能读其他语言? 我拷。vb.net中DataGrid的单元格有Click事件,c#中就是不知道怎么用,微软高手了?出来! 三年开发经验的Java程序员被C#小问题难住 网路图片下载请教高手了。
public class Class1{public void method1(){
MessageBox.Show("hello world", Application.ProductName);
}}
}
但具体操作有问题哦
这上面的方法真的很适合我的需求,但是我执行到2.1生成tlb类型库这一步时,总是提示TlbExp :error TX0000:不支持给定路径的格式
//注意2:提供一个Interface Attribute标明InterfaceType特性为IDispatch
// 一个实现类 Attribute标明ComSourceInterfaces是实现这个Interface的。
// 这样COM用的时候,这个类能智能感知出里面所提供的方法。
//注意3:方法需要标明:ComVisible为true,否则不会为该方法包装。
namespace MyDLL_COM
{
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IDirectory4COM
{
string[] GetAllFiles(string directory);
} [ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces((typeof(IDirectory4COM)))]
[ComVisible(true)]
public class Directory4COM2 : IDirectory4COM
{
[ComVisible(true)]
public string[] GetAllFiles(string directory)
{
return Directory.GetFiles(directory);
}
}
}
2. 工程属性>Build选项卡>Output>Register for COM interop需要选上
会为该dll包装并注册。
等同如下(手动调用regasm工具,进行COM注册) c:\windows\Microsoft.NET\Framework\v2.0.50727
\regasm D:\Fillex\VS2008Projects\CSDNAnswer\MyDLL_COM\bin\Debug\MyDLL_COM.dll但上面工程属性设定后,无需手动调用注册工具。3. VB端调用
我用的VBA进行的测试:
Tools > Reference > 选择MyDLL_COM (能看到这个引用,说明前一步注册是成功的)
Private Sub CommandButton1_Click()
Dim i As Integer
Dim b As MyDLL_COM.Directory4COM2
Set b = New MyDLL_COM.Directory4COM2
str = b.GetAllFiles("D:\Test")
For i = 1 To UBound(str)
Cells(i, 2) = str(i)
Next
End Sub