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

最近想改进一个两年前写的小程序,原因是最近将运行在托管服务器上的asp程序迁移到阿里云主机上运行。

初次使用阿里云主机,买了一个配置较低的主机(1核,1G内存,年付:1500左右吧)

原来使用的托管的服务器配置较高(双核,1G内存)

原来的代码工作过程:

从远程服务器下载图片保存到本地服务器,进行优化后,再上传到远程服务器。

这里涉及到IO环境较多(下载保存,图片优化后再保存,上传读取),在原来托管的服务器上运行的时候,感觉还行。

但使用阿里云主机后,由于配置较低,硬盘IO性能不高,整个程序运行起来很卡。

新的规划: 从远程服务器下载图片,保存到内存,直接优化内存中的图片,优化后直接将内存中的图片上传到远程服务器。

也就是跳过所有的硬盘IO。

由于原来的代码是asp写的,就需要写一个 com组件, 我花了一天时间尝试使用 标准c 来写com,到网上找了半天资料,最后也没搞成功。 vc/c++ 没写过。 最后没办法,就试了一下 vb,没想到用 vb 写 com非常的简单, 创建一个 activex dll 工程,只写了几行代码,生成dll,就能在 asp中调用了。真TM的快捷。

不过问题又来了,图片优化这一块的关键代码是用 c 写的, 现在调用方式就变成: asp -> vb(com,dll) -> c -> vb -> asp

由于vb调用c写的dll,由于参数类型的不同,传递参数又搞了一整天, 简直太折磨人了。

下面是网上收集到的 vb 与 c(dll) 调用的相关资料:

再谈在VB中调用VC++开发的DLL

http://www.wangchao.net.cn/bbsdetail_28727.html

通过 (MinWG)的命令: objdump youhua.dll -p 查看 dll中实际的函数名,其实在codeblocks中会生成相关的.def 文件,里面有详细的实际生成的函数名, 一般都是 函数名@number

VB调用DLL的缺省调用方式是:传引用调用。即VB传一个指向参数变量的指针,DLL中便可以修改实际参数的值。

若要传值方式,则需要在函数申明时在参数前加上ByVal关键字。

下面谈谈字符串调用的约定。 事实上对字符串无论是否使用ByVal关键字,在DLL中均可以修改传入的参数。但,用不用ByVal关键字,还是有区别的。因为VB与DLL接口支持两种类型的字符串,VB是用如下的规则来匹配类型的,若没用关键字ByVal,则传一个VB字符串句柄(数据类型为HLSTR),这种类型或字符串句柄只有专为VB设计的DLL才能识别。所以,通常的DLL如果不是专门为VB设计的,就只有用ByVal关键字了。因为加了ByVal关键字后,VB会在字符串尾加上Null字符,即自动将VB字符串转换成C-style字符串,然后将指向该串的指针传给DLL。

C做Dll,在VB中调用dll 出现 Dll调用约定错误

http://bbs.pfan.cn/showtxt.asp?id=288913

VB如何调用DLL

http://blog.csdn.net/chenkangli/article/details/396443

在VB和DLL间传递字符串

http://blog.csdn.net/sigepluto/article/details/1600448

2014-03-31

时间: 2024-10-13 12:48:38

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

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

如何把ASP编写成DLL

这篇文章主要是把ASP代码变成组件,开发者不仅是加快了ASP的速度,而且也能保护自己的代码. 下面,我们会来编写一个非常简单的组件,重点是知道怎样开发DLL组件,而不是其复杂的代码!这些都要靠你们自己以后的努力了. 服务器端组件 首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依靠HTML来起作用.而且只能在IE上有用.但是服务器端的组件是运行在服务器端,它在服务器上执行各种操作.因此,所有的浏览器都能享用,它依靠的是服务器而不是浏览器. 当IIS被请求执行一个ASP程序,

【转载】错误 CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/.........dll”--“拒绝访问。 ”

win7中安装asp.net的问题 编译器错误信息: CS0016: 未能写入输出文件问题解决办法 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误信息: CS0016: 未能写入输出文件“d:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\5177u\d087da43\c12930d8\9ze28k_8.dll”--“拒绝访问. ”

VC6.0编译DLL,使用VS2010调用问题及解决方法

1.做驱动的时候,做应用程序需要和驱动通信,必须建立一个DLL. 2.因为客户使用版本太低,需要使用到VC6.0编写DLL 3.在VC6.0上编写DLL的时候,导出的函数名会出现和原函数名不对,导致调用失败 4.解决办法, 找到VC6.0工程下面的文件   ***.DEF. 把里面的   LIBRARY  后面输入要导出的DLL的文件名.如: LIBRARY      "pc104dll" 在EXPORTS后面输入要导出的函数名,整个文件内容入下: LIBRARY      "

使用 __declspec(dllimport) 能够优化对DLL导出函数的调用.

使用 __declspec(dllimport) 能够优化对DLL导出函数的调用. 不使用时: [DLL] #ifdef THEDLL_EXPORTS #define THEDLL_API __declspec(dllexport) #else #define THEDLL_API __declspec(dllimport) #endif // THEDLL_API int fntheDll(void); [EXE] #include "..\\theDll\\theDll.h" #p

VC++编写DLL导出函数及其调用方法

DLL (Dynamic Link Library)动态链接库,是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件,其优点主要有:1. 有助于节省内存:2. 有助于资源共享:3. 不需编译的软件系统升级:4. 支持多语言程序.当然,有的时候我们也可以将一些核心的或者不愿意公开提供的函数编写为DLL,从而起到隐藏和保护的作用. 下面结合实例详细说明在Visual Studio 2008 SP1 IDE中如何创建.编写和导出VC++ MFC DLL,以及如何调用生成的DLL.(完整

混淆ASP MVC的DLL

使用dotfuscator对ASP MVC的DLL进行混淆.混淆后的代码仅是将代码的名称用abc等字符混淆,同时将字符串设置为乱码.增加了阅读难度,并不是完全防止反编译. --By Brisk Yu 1 打开待混淆的DLL: 2 按照如下配置: 1)对字符串进行乱码混淆 2)加入支持.net framework 4.0版本的工具(在自己的C盘搜索下,注意Name必须如图): 3)据说Library不能勾选,不过这里都没有勾选: 4)Rename的设置 5)因为ASP MVC的DLL与普通的C#程

asp.net开源流程引擎API开发调用接口大全-工作流引擎设计

关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 一.程序调用开发接口二.   接口说明 所谓的驰骋工作流引擎的接口,在BP.WF.Dev2Interface.*上面的静态方法,前台页面通过这些静态方法通过页面于操作者提供交互数据功能交互.    Port_* 开头的方法都是组织结构相关的操作,比如:登录.登出.发送消息.    DB_*的都是提供数据列表的接口,比如:发起列表.待办列表.在途列表.完成列表等.   

C++写dll文件用C#调用

创建项目: 项目为win32项目,注意不是控制台,然后在设置处选上DLL并勾上"导出项目",见下图 开始写c++: 把和项目同名的.h文件和.cpp文件清空,添加如下代码: //在头文件中添加 #ifdef WIN32PROJECT1_EXPORTS #define WIN32PROJECT1_API __declspec(dllexport) #else #define WIN32PROJECT1_API __declspec(dllimport) #endif extern &qu