asp 调用 vb(activex dll) ,参数传递(传引用)需要注意

今天上午测试 vb 与 c(dll) 之间交互,传递参数的时候,没遇到什么太大的问题。

下午在asp中调用vb(activex dll)时, 在asp代码中传参数到 vb(dll)中时,遇到问题了。

上午写 vb 与 c(dll)的时候,vb 传参数到c(dll)的时候,默认就传引用, 除非在vb中显示的使用 byval.

下午写 asp 与 vb(dll)的时候,asp传参数到 vb(dll)的时候,默认传值,而我需要按引用传过去。

在 vb(dll)中,我显示的申请参数的类型: byref x as Integer, 在 asp中调用,就会抛出错误: 调用的参数类型不正确

明明申请变量为 Integer, 传过去的也确实是 Integer类型的,为什么会出这样的错误呢?

搜索了老半天,终于找到解决办法:

ASP如何传递引用参数到DLL中? http://bbs.csdn.net/topics/60474811

其中关键点:在vb(dll)中变量不仅要申明为 ByRef 同时还要 as Variant

Public Function ExportXLS(ByRef x As Variant, ByRef y As Variant) As Integer

End Function

这样在asp中传参数的时候,就是按引用传递,传过去的参数也就可以在 vb(dll)内部修改了。

不过测试时还发现,如果传过去的是字符串,同时想在vb(dll)中修改这个字符串,最好先申请一个临时的字符串,然后处理这个临时的字符串,最后把再这个字符串赋值到 asp 传过去的那个字符串变量上。不然会出现意想不到的结果。

2014-04-01

时间: 2024-08-08 15:03:59

asp 调用 vb(activex dll) ,参数传递(传引用)需要注意的相关文章

C#调用C/C++ DLL 参数传递和回调函数的总结

原文:C#调用C/C++ DLL 参数传递和回调函数的总结 Int型传入: Dll端: extern?"C"?__declspec(dllexport)?int?Add(int?a,?int?b) { ????return?a+b; } C#端: [DllImport("aeClient2.0.dll",?CallingConvention?=CallingConvention.Cdecl)] ?public?static?extern?unsafe?int?Add

vc调用delphi的dll 参数传递 报错

可能原因: 调用方式约定不一致. 函数调用约定如下: 1. __cdecl:C 和 C++ 程序的缺省调用规范. 2. __stdcall:标准调用约定(即WINAPI调用约定),也就是pascal调用约定. 如果VC调用时,调用的约定方式和delphi的dll中函数约定方式不一致,就会出问题.

asp <----> vb(com,dll) <---> c 来回的调用,生命在于折腾

最近想改进一个两年前写的小程序,原因是最近将运行在托管服务器上的asp程序迁移到阿里云主机上运行. 初次使用阿里云主机,买了一个配置较低的主机(1核,1G内存,年付:1500左右吧) 原来使用的托管的服务器配置较高(双核,1G内存) 原来的代码工作过程: 从远程服务器下载图片保存到本地服务器,进行优化后,再上传到远程服务器. 这里涉及到IO环境较多(下载保存,图片优化后再保存,上传读取),在原来托管的服务器上运行的时候,感觉还行. 但使用阿里云主机后,由于配置较低,硬盘IO性能不高,整个程序运行

C#.net中调用VB.net编写的dll示倒

经过网上查,发现两者的dll应该能共用的,就试了一下,好一会儿才成功,不多说,直接上示例.IDE为vs2008. VB.net中编写类库,设置项目名称(同时默认为解决方案名称)后开始编写,代码如下: Namespace test1    Public Class Cls1        Public Function plus(ByVal a As Double, ByVal b As Double) As Double            plus = a + b * 2        En

深刻理解C#的传值调用和传引用调用

传值调用和传引用调用是几乎所有主流语言都会涉及到的问题,下面我谈谈我对C#中传值调用和传引用调用的理解. 1. 一般对C#中传值调用和传引用调用的理解 如果传递的参数是基元类型(int,float等)或结构体(struct),那么就是传值调用. 如果传递的参数是类(class)那么就是传引用调用. 如果传递的参数前有ref或者out关键字,那么就是传引用调用. 验证示例的代码如下: view sourceprint? 01    using System; 02 03    public cla

Python参数传递(传值&传引用)

# 测试参数是传值还是传引用def test(arg): print("test before") print(id(arg)) arg[1]=30 # 测试可变对象 # arg[3][2] = 16 # 测试嵌套类型 # arg = list(range(5)) print("test after") print(id(arg)) return argchange_loc = 1if change_loc == 1: # 传入可变对象 my_list = list

C#调用VB进行简繁转换的方法

本文实例讲述了C#调用VB进行简繁转换的方法.分享给大家供大家参考.具体分析如下: 首先在C#项目中引用Microsoft.VisualBasic.dll,版本自己选择合适的 然后在项目中添加引用:using Microsoft.VisualBasic; 转换: 转为繁体: outputText=Strings.StrConv(txt待转换文本, VbStrConv.TraditionalChinese); 转为简体: outputText=Strings.StrConv(txt待转换文本, V

python函数传参是传值还是传引用?

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

Java经典问题:传值与传引用?

转自:http://developer.51cto.com/art/201104/254715.htm Java到底是传值还是传引用?相信很少有人能完全回答正确.通常的说法是:对于基本数据类型(整型.浮点型.字符型.布尔型等),传值;对于引用类型(对象.数组),传引用.基本类型传值,所有人都不会对此有疑义;问题出在引用类型上. 为引入正题,不妨先看看下面的例子,你能正确给出程序的运行结果嘛? /** * @(#)Swap.java * * *  @author *  @version  1.00