我的VBS/Jscript脚本引擎是MSscript.ocx。
请问大侠我如何在脚本语言里调用C/C++写的带指针参数的函数呢?(已实现了自动化接口)。希望C/C++函数能修改脚本语言传入参数的值,返回给脚本语言。好像VBS有ByRef的参数类型,但我试了没成功。JScripte又能怎样实现呢?脚本代码:
slinyin m_linyin;pScriptControl->Language = "VBScript"; //setup1
pScriptControl->AllowUI = TRUE; //setup2
pScriptControl->AddObject("linyin", m_linyin.GetIDispatch(1), 1);
pScriptControl->AddCode("Function my(Argu1) \n dim b\n b=10 \n linyin.GetValue(b) \n my=b \n End Function ");
_variant_t outpar = pScriptControl->Run("MyStringFunction", &psa);//setup4函数定义:
void slinyin ::GetValue( Long * plValue ){*plValue = 100;}

解决方案 »

  1.   

    你怎么定义IDL文件的?
    必须是
    GetValue([out,retval]long* plValue);
    在VBS中就是一个 无参的返回值为long的函数.
      

  2.   

    akirya,我是用VC Class Wizard的Automation生成的,有一个*.odl文件,你是说这个吗?在*.odl文件中有这样的语句:
    [id(5)] void GetValue(long* plvalue);在类文件中:
    BEGIN_DISPATCH_MAP(linyin, CCmdTarget)
    //{{AFX_DISPATCH_MAP(linyin)
    DISP_FUNCTION(linyin, "GetValue", GetValue, VT_EMPTY, VTS_PI4)
    //}}AFX_DISPATCH_MAP
    END_DISPATCH_MAP()void linyin::GetValue(long FAR* plvalue) 
    {
    // TODO: Add your dispatch handler code here
    *plvalue = 100;
    }我要怎样才能做到在脚本程序中调用 linyin.GetValue(pValue)之后,pValue的值为GetValue所赋的值呢?是否要把参数定义成别的特殊的类型才能支持像C/C++中的指针操作?
      

  3.   

    [id(5)] void GetValue(long* plvalue);
    改成
    [id(5)] HRESULT GetValue([out,retval]long* plValue);
      

  4.   

    akirya, 还是不行,不知道哪里出错。
    我在VBS脚本里要怎么调用它呢?直接用Dim a, linyin.GetValue(a)的格式吗?其实我的目的是脚本在调用C/C++函数的过程中,参数的值会被所调用的函数改变。请问要实现这个目的我要怎么设计C函数,和在脚本中使用什么样的调用方式呢?脚本的引擎是MSscript.ocx
      

  5.   

    [id(5)] void GetValue(long* plvalue);
    改成
    [id(5)] HRESULT GetValue([out,retval]long* plValue);改成这样都不行么?
      

  6.   

    Dim a
    a = linyin.GetValue();这样调用
      

  7.   

    wshcdr, akirya:还是试不成功,是不是我的问法有问题,或者换一种问法,我要如何从脚本语言里传一个变量的指针到被调用的C函数中呢?脚本和C函数的格式没有限制,只要能实现这个功能就好。请问有什么书可以参考吗?
      

  8.   

    To akirya,
    -----------------
    Dim a
    a = linyin.GetValue();这样调用
    -----------------
    这样调用的话plvalue传入哪个变量的指针呢?a的吗?