#include <stdio.h>
#import "C:\winnt\system32\msscript.ocx" // msscript.ocx
using namespace MSScriptControl;int main(void)
{
HRESULT hr = CoInitialize(NULL); IScriptControlPtr pScriptControl(__uuidof(ScriptControl)); // Create a VARIANT array of VARIANTs which hold BSTRs
LPSAFEARRAY psa;
SAFEARRAYBOUND rgsabound[] = { 3, 0 }; // 3 elements, 0-based
int i; psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
if (!psa)
{
return E_OUTOFMEMORY;
} VARIANT vFlavors[3];
for (i = 0; i < 3; i++)
{
VariantInit(&vFlavors[i]);
V_VT(&vFlavors[i]) = VT_BSTR;
} V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"));
V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"));
V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip")); long lZero = 0;
long lOne = 1;
long lTwo = 2; // Put Elements to the SafeArray:
hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0]);
hr = SafeArrayPutElement(psa, &lOne,&vFlavors[1]);
hr = SafeArrayPutElement(psa, &lTwo,&vFlavors[2]); // Free Elements from the SafeArray:
for(i=0;i<3;i++)
{
SysFreeString(vFlavors[i].bstrVal);
} // Set up Script control properties
pScriptControl->Language = "JScript";
pScriptControl->AllowUI = TRUE;
pScriptControl->AddCode(
"function MyStringFunction(Argu1,Argu2,Argu3)\
{ return \"hi there\" ;}" );// string strResult = pScriptControl ->Eval("1+3+6*9"); // Call MyStringFunction with the two args:
_variant_t outpar = pScriptControl->Run("MyStringFunction", &psa);
// Convert VARIANT to C string:
_bstr_t bstrReturn = (_bstr_t)outpar;
char *pResult = (char *)bstrReturn;
// Print the result out:
printf("func=%s\n",pResult); // Clean up:
SafeArrayDestroy(psa); CoUninitialize(); return 0;
}
我编译运行,老是出现什么内存不可读的错误,谁知道怎么回事?
而我在vc中新建工程,编译没有错误而每次到IScriptControlPtr pScriptControl(__uuidof(ScriptControl));时就说是运行时错误,真是不明白怎么回事了?这个是微软msdn自带的例子呀。
#import "C:\winnt\system32\msscript.ocx" // msscript.ocx
using namespace MSScriptControl;int main(void)
{
HRESULT hr = CoInitialize(NULL); IScriptControlPtr pScriptControl(__uuidof(ScriptControl)); // Create a VARIANT array of VARIANTs which hold BSTRs
LPSAFEARRAY psa;
SAFEARRAYBOUND rgsabound[] = { 3, 0 }; // 3 elements, 0-based
int i; psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
if (!psa)
{
return E_OUTOFMEMORY;
} VARIANT vFlavors[3];
for (i = 0; i < 3; i++)
{
VariantInit(&vFlavors[i]);
V_VT(&vFlavors[i]) = VT_BSTR;
} V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"));
V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"));
V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip")); long lZero = 0;
long lOne = 1;
long lTwo = 2; // Put Elements to the SafeArray:
hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0]);
hr = SafeArrayPutElement(psa, &lOne,&vFlavors[1]);
hr = SafeArrayPutElement(psa, &lTwo,&vFlavors[2]); // Free Elements from the SafeArray:
for(i=0;i<3;i++)
{
SysFreeString(vFlavors[i].bstrVal);
} // Set up Script control properties
pScriptControl->Language = "JScript";
pScriptControl->AllowUI = TRUE;
pScriptControl->AddCode(
"function MyStringFunction(Argu1,Argu2,Argu3)\
{ return \"hi there\" ;}" );// string strResult = pScriptControl ->Eval("1+3+6*9"); // Call MyStringFunction with the two args:
_variant_t outpar = pScriptControl->Run("MyStringFunction", &psa);
// Convert VARIANT to C string:
_bstr_t bstrReturn = (_bstr_t)outpar;
char *pResult = (char *)bstrReturn;
// Print the result out:
printf("func=%s\n",pResult); // Clean up:
SafeArrayDestroy(psa); CoUninitialize(); return 0;
}
我编译运行,老是出现什么内存不可读的错误,谁知道怎么回事?
而我在vc中新建工程,编译没有错误而每次到IScriptControlPtr pScriptControl(__uuidof(ScriptControl));时就说是运行时错误,真是不明白怎么回事了?这个是微软msdn自带的例子呀。
解决方案 »
- combo box与picture的问题请大家帮忙 谢谢了
- VC6 编译后,有这样的错误,这个怎么解决啊?
- 跪求大侠帮助我下载PUDN的两个文件代码
- 关于API,挂钩PE的输入节问题,高手进来哦
- 初学者请教《win32程通信模块》的设计和实现。分数500分。
- 请教各位高人关于ADO的Close
- 现在我可以创建一个白色背景的图片,但width小于800后就会在中间出现一条垂直的黑杠
- VC和VC++有什么不同
- "一个组件可能包含有多个接口"是不是就是指该COM的实现类继承了多个interface?
- 已知一个打开文件的句柄,如何读取此文件的前188个字节?
- MFC处理消息时,如何根据消息的窗口句柄hwnd值查找窗口对象的地址的
- 请教看过《MFC windows程序设计》的朋友,关于书中第11章的例子Wanderer
runtime error!
abnormal program termination
我才写了三句话
#import "msscript.ocx" rename_namespace("MSScriptControl")
using namespace MSScriptControl;方法中
IScriptControlPtr pScriptControl(__uuidof(ScriptControl));
就上面这句一加上去就出错.
MSScriptControl::IScriptControlPtr pScriptControl;//(__uuidof(MSScriptControl));
pScriptControl.CreateInstance(__uuidof(MSScriptControl::ScriptControl));
pScriptControl->Language = "JScript";
pScriptControl.CreateInstance(__uuidof(ScriptControl));
放到方法体内就没问题了,谁能解释一下为什么?
再问一个问题就结贴,象这些 -IC:\Sun\AppServer\jdk\include 参数我该怎么直接设置到工程中去?
我的定义方式:
全局声明放在 应用类的头文件
extern CSaveWordToDBApp theApp;
extern MSScriptControl::IScriptControlPtr pScriptControl;//(__uuidof(MSScriptControl));定义放在应用类实现文件中位置和 theApp一样
CSaveWordToDBApp theApp;
MSScriptControl::IScriptControlPtr pScriptControl;//(__uuidof(MSScriptControl));
比如我定义了一个全局的变量,在一个类的生命周期中都可以使用它,我应该在哪初始化它呢?
放到InitInstance()中没法正确加载,放在构造器中也不行,编译没有问题.
如果你定义的是全局变量,那么应该在CoUninitialize() 之前加上:g_ScriptControlPtr.Release();* 注意用"."运算来调用,而不是用"->".
在InitInstance中创建,在人以一个位置都可以初始化,并且不用再次声明extern MSScriptControl::IScriptControlPtr pScriptControl;
我建议再查查别的问题,我测试程序一点问题没有。