msscript使用, 记录一些坑

先上代码,照着代码直接调用是没有问题的

#ifdef _WIN64
#import "C:/Windows/System32/msscript.ocx" no_namespace
#ifdef _DEBUG
#include "x64/Debug/msscript.tlh"
#else
#include "x64/Release/msscript.tlh"
#endif
#else
#import "C:/Windows/SysWOW64/msscript.ocx" no_namespace
#ifdef _DEBUG
#include "Debug/msscript.tlh"
#else
#include "Release/msscript.tlh"
#endif
#endif
class Script
{
private:
	HRESULT hr;
	IScriptControlPtr pScriptControl;
public:
	Script ():
		hr(CoInitialize (NULL)),
		pScriptControl(__uuidof(ScriptControl))
	{
		pScriptControl->put_Language ((BSTR)L"JavaScript");
		pScriptControl->PutAllowUI (VARIANT_FALSE);
	}
	~Script ()
	{
		pScriptControl->Release ();
		CoUninitialize ();
	}
	void AddCode (const wchar_t* pCodes)
	{
		BSTR strCodes = SysAllocString (pCodes);
		if (!SUCCEEDED (pScriptControl->raw_AddCode (strCodes)))
		{
			const char* errstr = pScriptControl->GetError ()->GetText ();
			if (errstr)
			{
				std::cout << errstr;
			}
		}
		SysFreeString (strCodes);
	}
	void RunCode (const wchar_t* pCodes)
	{
		BSTR strCodes = SysAllocString(pCodes);
		if (!SUCCEEDED (pScriptControl->raw_ExecuteStatement (strCodes)))
		{
			const char* pErrStr = pScriptControl->GetError ()->GetText ();
			std::cout << pErrStr;
		}
		SysFreeString (strCodes);
	}
	void Call (const wchar_t* pFuncName, VARIANT& Result, long nParam = 0, ...)
	{
		LPSAFEARRAY pSafeArray = NULL;
		LPVARIANT pVarChunk = NULL;
		//1维数组参数
		SAFEARRAYBOUND ArrBounds;
		ArrBounds.cElements = nParam;
		ArrBounds.lLbound = 0;
		pSafeArray = SafeArrayCreate (VT_VARIANT, 1, &ArrBounds);
		if (nParam)
		{
			pVarChunk = new VARIANT[nParam];
			if (!pSafeArray || !pVarChunk)
			{
				throw "Alloc Failed";
			}
			va_list _ArgList;
			va_start (_ArgList, nParam);
			for (long i = 0; i < nParam; i++)
			{
				VariantInit (&pVarChunk[i]);
				V_VT (&pVarChunk[i]) = VT_BSTR;
				V_BSTR (&pVarChunk[i]) = SysAllocString (va_arg (_ArgList, const wchar_t*));
				SafeArrayPutElement (pSafeArray, &i, &pVarChunk[i]);
			}
			va_end (_ArgList);
		}
		VariantInit (&Result);
		BSTR strName = SysAllocString (pFuncName);
		if (!SUCCEEDED (pScriptControl->raw_Run (strName, &pSafeArray, &Result)))
		{
			const char* errstr = pScriptControl->GetError ()->GetText ();
			if (errstr)
			{
				std::cout << errstr;
			}
		}
		SysFreeString (strName);
		if (pSafeArray)
		{
			for (long i = 0; i < nParam; i++)
			{
				SysFreeString (V_BSTR (&pVarChunk[i]));
			}
			SafeArrayDestroy (pSafeArray);
		}
	}
};

下面说注意的点

OCX这个控件在我的系统里存在于C:/Windows/SysWOW64目录下, 是32位PE, 没有找到64位的版本

导入后会在中间目录生成.tlh文件, 相当于头文件, 如果我默认的路径不对自己修改下

调用接口时,注意它所有为BSTR的参数最好都用SysAllocString去创建, 用完记得释放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
详见http://bbs.csdn.net/topics/390381933 另外里面有几个控件可能也用得着,你懂的。 驱动器 C 中的卷没有标签。 .\MSSCRIPT\VBE600CHS1\script 的目录 2013/08/19 11:03 <DIR> . 2013/08/19 11:03 <DIR> .. 1998/08/05 04:12 <DIR> CHINESE 1998/07/29 18:59 109,969 DISPEX.DLL 1998/07/29 18:59 1,209,970 JSCRIPT.DLL 1997/05/24 17:16 2,154 MSSCRIPT.CNT 1997/05/24 17:16 70,780 MSSCRIPT.HLP 1998/05/01 08:39 133,392 MSSCRIPT.OCX 1998/05/13 06:53 576 README.TXT 1998/07/29 18:59 989,779 VBSCRIPT.DLL 7 个文件 2,516,620 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1998/08/05 04:12 <DIR> CONTROLS 1998/08/05 04:12 <DIR> CRYSREPT 1998/08/05 04:12 <DIR> MSAGENT 2013/08/19 11:03 <DIR> SCRIPT 2013/08/19 11:14 <DIR> WINLESS 0 个文件 0 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\CONTROLS 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1997/03/19 11:40 28,160 DBGRDCHS.DLL 1997/03/19 11:40 86,016 MSCHTCHS.DLL 2 个文件 114,176 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\CRYSREPT 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1997/03/18 19:40 21,504 CC245CHS.DLL 1 个文件 21,504 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\MSAGENT 的目录 1998/08/05 04:12 <DIR> . 1998/08/05 04:12 <DIR> .. 1998/02/25 03:10 328,336 MSAGENT.CHS.EXE 1 个文件 328,336 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\SCRIPT 的目录 2013/08/19 11:03 <DIR> . 2013/08/19 11:03 <DIR> .. 1998/06/15 04:46 18,104 JSCHS.DLL 1998/05/01 08:38 13,584 MSSCRCHS.DLL 1994/04/04 03:23 2,420 MSSCRIPT.CNT 1994/04/04 03:34 239,528 MSSCRIPT.HLP 1998/06/15 04:46 14,632 VBSCHS.DLL 5 个文件 288,268 字节 .\MSSCRIPT\VBE600CHS1\script\CHINESE\WINLESS 的目录 2013/08/19 11:14 <DIR> . 2013/08/19 11:14 <DIR> .. 1998/06/18 00:39 13,690 LTWTCT98.CHI 1998/06/18 00:39 19,382 LTWTCT98.CHM 2013/08/19 11:14 24,427 LTWTCT98.chw 1998/07/08 11:00 32,768 MSWLSCHS.DLL 4 个文件 90,267 字节 所列文件总数: 20 个文件 3,359,171 字节 20 个目录 984,694,784 可用字节
SEN12MS数据集可以按照以下步骤进行使用: 1. 获取数据集:你可以在SEN12MS官方网站或其他可信的数据源上获取SEN12MS数据集。请确保你遵守数据使用许可协议和任何相关规定。 2. 数据预处理:一般情况下,遥感数据需要进行预处理,例如校正、去噪、配准等。你可以使用遥感图像处理软件(如ENVI、QGIS、ArcGIS等)来完成这些预处理步骤。 3. 数据加载和解析:将数据加载到你选择的深度学习框架中,如TensorFlow、PyTorch等。根据你的需求,解析图像数据和标签,并进行相应的数据格式转换。 4. 数据分割和训练集划分:根据时间序列的特性,将图像数据划分为训练集、验证集和测试集。确保在划分时保持时间上的连续性,以便于时间序列分析。 5. 模型训练:选择合适的语义分割模型(如U-Net、DeepLab等),将训练集输入模型进行训练。根据需要,可以使用数据增强技术来增加数据的多样性。 6. 模型评估:使用验证集对训练得到的模型进行评估,计算指标如准确率、召回率、F1分数等。 7. 模型应用:使用训练好的模型对测试集或新数据进行语义分割预测,获得时间序列的语义分割结果。 需要注意的是,这只是一个基本的使用流程,具体的实现细节和操作步骤可能因你所选择的工具和框架而有所不同。在实际操作中,你可能还需要进行超参数调优、模型集成等步骤来进一步提高语义分割性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值