VB6.0调用C#中Dll文件需要注意哪些地方?

作者:小菜 更新时间:2025-03-16 点击数:
简介:在工作中遇到了在vb6.0的程序里要调用C#的Dll的问题,显然这两个开发环境属于不同的平台。

在网上拜读了几位大师的文章后,在实际试验中还是会发生这样那样的问题

【菜科解读】

在工作中遇到了在vb6.0的程序里要调用C#的Dll的问题,显然这两个开发环境属于不同的平台。

在网上拜读了几位大师的文章后,在实际试验中还是会发生这样那样的问题,最后还是实现了预期效果,在此我把我的实验步骤和注意事项分享如下,希望对需要之人有所帮助:

实验环境:

C#dll的创建使用的是vs2008;VB6.0

一、C#部分

1.用C#创建一个ClassLibrary项目(VS2008);

2.所有在VB6中要使用的方法都必须通过继承接口实现,并且为public的(非常重要,没有继承接口实现的方法,在VB6.0里面无法调用);

3.接口和类都需要加入属性Guid;

Guid通过VS2008自带的工具得到:

4.在VS2008的DOS命令工具提示框中运行:

sn -k C:\myKey.SNK

在C盘根目录下生成一个强名称文件:myKey.snk(注意这个强名称文件的名字可以自己定义,我暂定为myKey.snk)

5. 右击项目,选择属性,打开并编辑项目的属性对话框

在Application tab中,点击Assembly Information按钮,在打开的对话框中选中“make Assembly COM-Visible”(重要)

在Build Tab中,最好用Release模式编译,确认选中“Make assembly COM-Visible”(重要)。

在Signing Tab中引入上一步创建的强名称文件myKey.snk

6. 检查项目的AssemblyInfo文件,ComVisible应设为true,项目和文件版本不为1.0.*,应该是一个具体的值;

7.编译这个项目,生成dll文件。

到此为止,C#的Dll部分已经准备完毕了。

二、VB6部分

1. VB6调用环境必须安装.net framework 2.0或以上版本,最好是3.5(和VS2008相同的framework);

2. 复制dll文件进入VB6环境的目标文件夹,例如D:根目录, D:\TestCom.dll

3. 在Dos命令窗口用regasm命令注册这个dll文件生成.tlb文件

regasm D:\TestCom.dll /tlb:D:\TestCom.tlb /codebase

在D:\将会生成一个TestCom.tlb文件

4.在Dos命令窗口用gacutil命令添加Dll文件到GAC中(全局程序集缓存),这样这个Dll文件在这个PC中就可以随处使用

gacutil /I D:\TestCom.dll

5.在VB6项目中,把生成的.tlb文件加入到项目(References)

6. VB6代码即可调用tlb文件

Private Sub Command1_Click()

Dim obj As New t0426a.Class1

Form1.Label1.Caption = obj.GetString()

End Sub

注意:以上3,4步,需要在VB6环境的C:\WINDOWS\system32下面有相应的exe文件才可运行;第4步,可以省去;

还要说明的是,当转移这个VB6生成的exe程序(这个VB6可执行文件引用了C#的dll)到另外一台电脑上的时候,需要把这个C# Dll文件一同Copy到那台电脑上,并且重新执行第3步的注册生成tlb文件的工作,否则这个exe程序无法运行。

VB6.0,调用,中,Dll,文件,需要,注意,哪些,地方,

如何在浏览器中调试less&sass

Sass与LESS让人可以以类似编程的方式书写CSS,让我们有更好的方式管理CSS代码。

比如把一些功能函数抽出来,单独放一个文件。

页面一般都含有一些公共模块,把模块也可以抽离出来单独存放,等等。

很多同学都已经开始在项目使用less或sass,它们用起来确实是很爽,大大提高效率呀。

less & sass 都无法在浏览器中直接执行,需要变成CSS。

有时候想调试样式,我们看到的行号是css代码的行号,并不能直接对应到less&sass文件中,修改起来总是不方便。

看到less&sass这么受欢迎,热情的开发者们给firefox开发了一个插件FireSass,后来chrome也跟上了,开启一个实验性功能支持sass调试。

具体设置如下:编译时添加参数:sass开启debug-info选项:sass demo.sass demo.css –debug-infoless开启line-numbers:lessc demo.less demo.css –line-numbers=comments这样,编译后的css中将包含调试信息:浏览器设置:firefox执行安装FireSass即可。

chorme:地址栏打开chrome://flags/,启用开发者工具实验(DeveloperToolsexperiments.)。

重启浏览器后,打开开发者工具的设置选项卡,Experiments -> Support for sass 勾选。

最终调试效果: 如,何在,浏览器,中,调试,less,amp,sass,Sa

Javascript中的“作用域链”知识分享

7 for(var i = 0; i发生了什么事情很多人都可能知道上例的执行结果,但是不是所有人都明白为什么会是这样的结果,包括我自己。

名词解释活动对象:一次函数调用开始的时候,javascript解释器会收集函数体中的所有局部变量(以var形式声明的变量),将这些局部变量存储到一个称为“活动对象”的对象里,所有变量都初始为undefined。

代码示例1 var fun = function(){2 alert(name);3 var name = ‘段光伟‘;4 }当执行这个函数时候时(fun()),函数体还没执行到,当前的活动对象为[{ name: undefined }],因此fun()执行的结果为:函数的[scope]属性:每个函数在定义的时候(生成函数实例的时候)都会分配一个[scope]属性,这个属性指向的当前的“作用域链”。

这个属性开发人员是访问不到的,只有javascript能访问。

作用域链:当函数调用时,javascript引擎会维护一个这次调用的作用域链,这个作用域链条是函数的[scope]指向的作用域链加上函数调用时的活动对象,形式如[ 活动对象, 函数定义时的作用域链条]。

代码示例 1 var a = 1; 2 //步骤1:[ { a: 1, outer: undefined } ] 4 var outer = function(){ 5 //步骤3:[ { b: undefined, inner: undefined } ,{ a: 1, outer: function } ] 6 var b = 2; 7 var inner = function(){ 8 //步骤4:[ {}, { b: 2, inner: function } ,{ a: 1, outer: function } ] 9 return a + b;12 //步骤3:[ { b: 2, inner: function } ,{ a: 1, outer: function } ]13 return inner();16 //步骤2:[ { a: 1, outer: function } ]17 outer();作用域链规则规则1javascript一般运行在一定的宿主中,每个宿主都会提供一个“全局对象”,或者叫“全局活动对象”,这个全局对象是所有作用域链的根节点。

规则2“取值操作”(如:alert(xxxVar))的规则是,沿着作用域链依次查找名称为“xxxVar”的变量,返回第一个找到的值,如果找不到就抛出异常(ReferenceError: xxxVar is not defined)。

规则3“赋值操作”(如:xxxVar = ‘段光伟‘)的规则是,沿着作用域链依次查找名称为“xxxVar”的变量,覆盖第一个找到的值,如果找不到就将“xxxVar”添加到全局对象中。

备注“闭包”这个概念就是通过“作用域链”实现的,而C#是通过编译器实现的,.NET并不支持。

Javascript,中的,“,作用域链,”,知识,分享,代

加入收藏
               

VB6.0调用C#中Dll文件需要注意哪些地方?

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录