• TPS Dll多参传入的解决方案


    PlantSimulation 底层Dll二次开发-多参传入的解决方案

    ///推荐3年以上的人员学习!

    var file:string := to_str(ApplicationHome, "C-Interface\DA_DataCore.dll")
    DllID:= loadLibrary(file)
    if DllID < 1
    	debug
    end
    print getLoadedLibrary(DllID)," is loaded."
    var UUID:=callLibrary(DllID,"ReadSQLDataOfIndex",["IndexR",12345,"IndexC","变量2"])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    extern "C" __declspec(dllexport)
    void ReadSQLDataOfIndex (UF_Value * ret, UF_Value * IndexRowValue)
    {
    	UF_Value IndexValue;
    	if (mIndexRowValue.type==UF_ARRAY)
    	{
    		//强制执行数据转换
    		IndexValue.type = UF_INTEGER;
    		IndexValue.value.integer = mValueArray->nValues;
    		for (size_t i = 0; i < IndexValue.value.integer; i++)
    		{
    			UF_Value mValue = mValueArray->values[i];
    			switch (mValue.type)
    			{
    			case UF_ARRAY:
    				break;
    			case UF_STRING:
    				break;
    			case UF_INTEGER:
    				break;
    			default:
    				break;
    			}
    			if (mValue.type == UF_ARRAY)
    			{
    				mValueArray = (UF_ValueArray*)mIndexRowValue.value.value_array;//强制执行数据转换
    			}
    		}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    ///
    /// 向指定数据表查询指定关键字的指定值 IndexRowValue 最后一个值必须传入数字 数字的值等于传入的变量总数,如果传入的数据中不包含任何数据 则所有数据均无法传入。
    ///
    ///
    ///
    ///
    extern “C” __declspec(dllexport)
    void ReadSQLDataOfIndex(UF_Value * ret, UF_Value * IndexRowValue)
    {

    if (IndexRowValue->type!=UF_ARRAY)
    {
    	ret->type = UF_STRING;
    	ret->value.string = "-1";///返回错误
    	return;
    }
    UF_Value mIndexRowValue = *IndexRowValue;
    UF_ValueArray* mValueArray = NULL;
    char* SerchIndex,* FilitIndexValue,* FilitValue = NULL;
    mValueArray = (UF_ValueArray*)mIndexRowValue.value.value_array;//强制执行数据转换
    if (mValueArray->nValues ==4 && mValueArray->values[3].value.integer==3)
    {
    	// 对传入的变量集合值进行解析
    	SerchIndex = mValueArray->values[0].value.string;
    	FilitIndexValue = mValueArray->values[1].value.string;//读取其中的值
    	FilitValue = mValueArray->values[2].value.string;//读取其中的值
    	UID_Index_DataTableOprator uid;
    	char* RetValue=uid.Serch_UUID_byIndex(DA_SQL.YESQL, SerchIndex, FilitIndexValue, FilitValue);//RetValue 不能直接返回 因为这个指针执行的是子程序 在当前程序结束的时候 对应地址会被回收
    	char mRetValue[64];
    	memcpy(mRetValue, RetValue, strlen(RetValue));
    	ret->type = UF_STRING;
    	ret->value.string = RetValue;///返回成功执行的操作
    }
    else
    {
    	ret->type = UF_STRING;
    	ret->value.string = "-2";///值数量不对
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    }

  • 相关阅读:
    RunnerGo UI自动化使用体验
    TCP协议学习记录
    基于ssm的蛋糕预定网站
    Python小技巧:轻松找到电脑里的隐藏图片!
    14、Horizontal Pod Autoscal
    人脸自收集数据集辅助制作工具——多人在线协同标注系统
    大厂钟爱的全链路压测有什么意义?四种压测方案详细对比分析
    redis配制redis-static-server
    抖音实战~项目关联UniCloud
    RetinaNet网络理解
  • 原文地址:https://blog.csdn.net/qingyangwuji/article/details/127425818