金字塔可以用vbs调用dll么?

Discussion in '金字塔决策交易系统' started by kuhasu, Apr 25, 2010.

  1. 同题目。
    请给出例子和图片,谢谢!
     
  2. zwz

    zwz

    可以用DynamicWrapper,但它好象不支持参数为struct的函数。

    金字塔帮助文件关于DynamicWrapper的说明:

    金字塔的Visual Basic系统同样支持调用WIN32 API的各种函数功能,用户可以像普通VB程序一样使用金字塔的WIN32 API。
    使用方式示例如下:
    Dim UserWrap
    Set UserWrap = CreateObject("DynamicWrapper")
    '准备使用GetPrivateProfileString这个API函数
    UserWrap.Register "kernel32.DLL", "GetPrivateProfileString", "i=ssssls","f=s", "r=l"

    输入参数:
    i= 描述输入参数数量和类型,如前面的"i=ssssls"表示GetPrivateProfileString这个API函数前面有4个字符参数一个整型数值和最后一个字符串参数
    f= 调用方式描述,动态库有_stdcall 和 _cdecl这两种方式,跟据调用方式不同选择合理的方式,一般是_stdcall方式§

    输出参数:
    r= 输出类型

    变量类型描述:
    const ARGTYPEINFO ArgInfo[] =
    {
    {'a', sizeof(IDispatch*), VT_DISPATCH}, // a IDispatch*
    {'c', sizeof(unsigned char), VT_I4}, // c signed char
    {'d', sizeof(double), VT_R8}, // d 8 byte real
    {'f', sizeof(float), VT_R4}, // f 4 byte real
    {'k', sizeof(IUnknown*), VT_UNKNOWN}, // k IUnknown*
    {'h', sizeof(long), VT_I4}, // h HANDLE
    {'l', sizeof(long), VT_I4}, // l long
    {'p', sizeof(void*), VT_PTR}, // p pointer
    {'s', sizeof(BSTR), VT_LPSTR}, // s string
    {'t', sizeof(short), VT_I2}, // t short
    {'u', sizeof(UINT), VT_UINT}, // u unsigned int
    {'w', sizeof(BSTR), VT_LPWSTR}, // w wide string
    }

    对象标识 "DynamicWrapper"

    示例:

    1、查找某个标题特征窗口
    Set Wrap = CreateObject("DynamicWrapper")
    Wrap.Register "user32.dll","FindWindow","i=ss","f=s", "r=l"
    WindowHandle = Wrap.FindWindow("", "无标题 - 记事本")
    If WindowHandle=0 then
    MsgBox "发现窗口"
    Else
    MsgBox "没发现"
    End If
     

    2、从C盘拷贝文件
    Set Wrap = CreateObject("DynamicWrapper")
    Wrap.Register "KERNEL32.DLL", "CopyFileA","i=ssl","R=l"
    a=Wrap.CopyFileA ("c:\cctv.txt","c:\22.txt",1)
    If a=1 Then MsgBox "copy 成功"
     

    3、这个是用来检测是否有相应的Word已运行程序的标题,有则提示关闭。
    strWindowTitle="QQ2009;计算器;a.txt - 记事本" '要关闭的窗口标题多个用;分隔开
    Set objWord = CreateObject("Word.Application")
    Set colTasks = objWord.Tasks
    strWindowTitles=Split(strWindowTitle,";")
    For Each strTitle In strWindowTitles
    If colTasks.Exists(strTitle) Then
    strAnswer=MsgBox("发现指定窗口【"&strTitle&"】是否关闭?",vbYesNo+vbQuestion,"")
    If strAnswer=vbYes Then colTasks(strTitle).Close
    End If
    Next
    objWord.Quit
     

    4、该示例使用金字塔的VBS系统调用WINDOWS API中的Sleep函数来实现延时功能
    参数为延时毫秒数
    Sub StockSleep(slSecond)
    Set Wrap = CreateObject("DynamicWrapper")
    Wrap.Register "KERNEL32.DLL", "Sleep","i=u","R=l"
    Wrap.Sleep(slSecond)
    End Sub

     
     
  3. 老大,我想听听他们开发人员怎么说地,嘻嘻~
     
  4. zwz

    zwz