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
比如把一些功能函数抽出来,单独放一个文件。
页面一般都含有一些公共模块,把模块也可以抽离出来单独存放,等等。
很多同学都已经开始在项目使用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中的“作用域链”知识分享
名词解释活动对象:一次函数调用开始的时候,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,中的,“,作用域链,”,知识,分享,代