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

 

posted @ 2015-06-18 09:03  personnel  阅读(247)  评论(0编辑  收藏  举报
友情链接:图片批量处理工具 gif动态图制作工具 制作电子相册 图片排版工具 制作淘宝主图视频 MKScript 鼠标键盘自动化脚本语言