CnPack Forum


 
Subject: 在C++buillder6中调用CnActiveScript组件出错
chinayu
新警察
Rank: 1



UID 146832
Digest Posts 0
Credits 45
Posts 12
点点分 45
Reading Access 10
Registered 2014-11-3
Status Offline
Post at 2025-1-12 17:53  Profile | Blog | P.M. 
在C++buillder6中调用CnActiveScript组件出错

在C++buillder6中调用CnActiveScript组件出错.delphi7没问题,例子ActiveScript_D7正常,可以运行,几个功能都没问题.我在C++builder6中,仿delphi7代码时,前面三个功能正常,最后一个创建类,就不能调用.
#include "CnActiveScript.hpp"
#include "CnASIDispatchProxy.hpp"
#include <TypInfo.hpp>
#include <typeinfo>

//组件实例已创建
TCnActiveScriptWindow *pScript = new TCnActiveScriptWindow(this);
//声明接口
interface ITest : public IActiveScriptInvokable
{
  public:
    virtual void __stdcall MsgBox(AnsiString Text) =0;
    virtual void __stdcall SetAppTitle(AnsiString Text)=0;
    virtual int  __stdcall Add(int A,int B)=0;
};
typedef DelphiInterface<ITest> _di_ITest;
//实现接口类
class TTest :public  TInterfacedObject,public ITest
{
  public:
    void __stdcall MsgBox(AnsiString Text)
    {
       ShowMessage(Text);
    };
    void __stdcall SetAppTitle(AnsiString Text)
    {
       Application->Title = Text;
    };
    int __stdcall Add(int A, int B){return A+B;};

    //-------------------------------------------------------------
    virtual HRESULT STDMETHODCALLTYPE QueryInterface(
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ void **ppvObject)
    { return TInterfacedObject:ueryInterface(riid, (void*)ppvObject); };

    virtual ULONG STDMETHODCALLTYPE AddRef( void)
    { return TInterfacedObject::_AddRef(); };

    virtual ULONG STDMETHODCALLTYPE Release( void)
    { return TInterfacedObject::_Release(); };

};


void __fastcall TForm1::Button4Click(TObject *Sender)
{
  _di_IDispatch  Intf;

  const type_info &t0 = typeid(ITest);
  TTest * p = new TTest();

  Typinfo::TTypeInfo * pInfo = new Typinfo::TTypeInfo;
  pInfo->Kind = Typinfo::tkInterface;
  pInfo->Name = t0.name();

  Intf = GetIDispatchProxy(p, pInfo);//此句出错

  pScript->Clear();
  pScript->ScriptLanguage = "VBScript";
  pScript->AddNamedItem("a", Intf);
  pScript->Execute("a.MsgBox()");
  pScript->Clear(); // ITest released

}
上述代编译没问题,运行时地址溢出了.跟踪后是CnASInvoker.pas文件中第352行出错.请教高手.


Image Attachment: [错误图片] Snipaste_2025-01-12_17-52-01.bmp (2025-1-12 17:53, 1.65 M)

Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6854
Posts 3598
点点分 6854
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2025-1-14 09:04  Profile | Blog | P.M. 
这个组件好多年没维护了……
Top
chinayu
新警察
Rank: 1



UID 146832
Digest Posts 0
Credits 45
Posts 12
点点分 45
Reading Access 10
Registered 2014-11-3
Status Offline
Post at 2025-1-14 17:24  Profile | Blog | P.M. 
在C++buillder6中调用CnActiveScript组件出错

感觉很实用的功能
Top
 




All times are GMT++8, the time now is 2025-2-5 23:59

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.008869 second(s), 9 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP