zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    粘性固定 position:sticky
    vue组件样式scoped
    vue组件结构
    vue根据路由判断所在的内容
    配置系统变量
    div中放入一个img元素导致div高度会多出几个像素
    button标签设置line-height问题
    Netty学习——protoc的新手使用流程
    Netty学习——Google Protobuf的初步了解
    Netty学习——Google Protobuf使用方式分析和环境搭建
  • 原文地址:https://www.cnblogs.com/personnel/p/4584932.html
Copyright © 2011-2022 走看看