调用源代码函数YC_cppLoad()、YC_cppFree()

编译并驻留函数YC_cppLoad()、YC_cppFree()

    该函数编译c/c++源代码,编译结果驻留内存,对外提供源代码函数接口。
它与语法pObj = <file.cpp> 具有相同的功能。
void *YC_cppLoad(
     const char *srcbuf, //源代码文件名或源代码缓冲区
     int srclen, //源代码长度
     void *pObj, //接收源代码数据地址的指针
     int isScript=0 //是否是Javascript代码调用该函数
     );
参数
srcbuf, srclen
当srclen等于0时,srcbuf是c/c++源代码的文件名,srclen大于0时,srcbuf
是源代码缓冲区,srclen是源代码长度。
pObj,isScript
    当isScript等于0时,是c/c++程序调用该函数,pObj接收函数接口的地址,
    当isScript等于1时,是Javascript程序调用该函数,pObj接收定义JS方法和属性的结构数据地址。

返回值
    如果函数运行成功,返回值为执行代码所在的内存地址,该返回值必须用YC_cppFree()函数释放。
    如果函数运行失败,返回值为NULL,*pObj被置为NULL,说明源码有语法错误。

释放函数

void YC_cppFree(
void *pHandle    //YC_cppLoad()函数的返回值
);
1. 用YC_cppLoad()获得源代码函数接口地址
struct XWEB
{
        int      sockid;
        char     *server_name;
};
struct hopeCLASS
{
        virtual double _stdcall sock_close(XWEB &pWeb);
        virtual char *_stdcall sock_read(XWEB &pWeb);
};
       源代码接口定义头文件hope.h
#include "hope.h"
double hopeCLASS::sock_close(XWEB &mweb)
{
    printf("%d\n",mweb.sockid);
    return 3.142592;
}

char *hopeCLASS::sock_read(XWEB &mweb)
{
    printf("%s\n",mweb.server_name);
    return "一览众山小。";
}

const hopeCLASS HOPE;
void main(void **pObj)
{
    *pObj = &HOPE;
}
                源代码接口实现文件hope.cpp
#include <stdio.h>
#include "ycapi.h"
#include "hope.h"
void main()
{
    hopeCLASS *HOPE;                     //声明hopeCLASS对象(接口)指针
    XWEB mweb = { 2020, "会当凌绝顶" };  //声明XWEB结构变量并对其初始化
    void *pHandle = YC_cppLoad("hope.cpp",0,&HOPE);  //获得hope.cpp函数接口
    if(!pHandle)  return;
    printf("%s\n",HOPE->sock_read(mweb));    //执行hope.cpp的sock_read()函数
    printf("%f\n",HOPE->sock_close(mweb));   //执行hope.cpp的sock_close()函数
    YC_cppFree(pHandle);                     //释放hope.cpp所占资源
}
           调用源代码接口函数的程序: tiger.cpp 

编译:用YC命令:ycc tiger.cpp 或 VC++命令:cl tiger.cpp 生成 tiger.exe
运行:在cmd界面执行tiger.exe后,输出下列文字:
            会当凌绝顶
            一览众山小。
            2020
            3.142592

2. 使用YC_cppLoad()函数的文件

    ychtml.cpp
        pObj->Handle = YC_cppLoad(href_name,0,&pObj->addy);
    ycweb.cpp
        yc86Handle = YC_cppLoad(“yc86.cpp”,0,&YC86);
        void *ycpop_Handle = YC_cppLoad(“ycpop.cpp”,0,&yc_PopupMenu);
    ycdraw.cpp
        ycsaveimg_Handle = YC_cppLoad(“ycsaveimg.cpp”,0,&ycx_ImageSave);
    ycjs.cpp
        pHandle = YC_cppLoad(exe_ptr,exe_len,&cppData,1);
        pHandle = YC_cppLoad(fileName,0,&cppData,1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值