using System;
using System.Text;using System.Runtime.InteropServices;namespace AspxBoy
{
/// <summary>
/// ApiCall 的摘要说明。
/// </summary>
public class ApiCall
{
public ApiCall()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[DllImport("vba6.dll",EntryPoint="EbExecuteLine",CharSet=CharSet.Unicode)]
public static extern int EbExecuteLine(
[MarshalAs(UnmanagedType.LPStr)]
StringBuilder pStrToExec,
int unkown1,
int unkown2,
int fCheckOnly); }
} StringBuilder sb=new StringBuilder("2+3");
int i=ApiCall.EbExecuteLine(sb,0,0,0);vba6.dll在bin目录下和winnt\system32下
using System.Text;using System.Runtime.InteropServices;namespace AspxBoy
{
/// <summary>
/// ApiCall 的摘要说明。
/// </summary>
public class ApiCall
{
public ApiCall()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[DllImport("vba6.dll",EntryPoint="EbExecuteLine",CharSet=CharSet.Unicode)]
public static extern int EbExecuteLine(
[MarshalAs(UnmanagedType.LPStr)]
StringBuilder pStrToExec,
int unkown1,
int unkown2,
int fCheckOnly); }
} StringBuilder sb=new StringBuilder("2+3");
int i=ApiCall.EbExecuteLine(sb,0,0,0);vba6.dll在bin目录下和winnt\system32下
VBA.Constants c=new Constants();//无重载
VBA.CollectionClass cc=new VBA.CollectionClass();//无重载
都没EbExecuteLine方法
public static extern int EbExecuteLine(
int pStrToExec,
int unkown1,
int unkown2,
int fCheckOnly);
public static extern int EbExecuteLine(
IntPtr pStrToExec,
int unkown1,
int unkown2,
int fCheckOnly);
pStrToExec,是字符串,要进去的是字符串指针,应用封送,功能就是求计算字符串表达式(包含非数值表达式的字符串)
老大,你试过没,我都试过,这样用不匹配
[DllImport("vba6.dll",EntryPoint="EbExecuteLine")]
public static extern int EbExecuteLine(
[MarshalAs(UnmanagedType.LPTStr )]
string pStrToExec,
int unkown1,
int unkown2,
int fCheckOnly);}
非常感谢你的帮助,还是不行,不过我找到另一种方法
com引用MSScriptControl MSScriptControl.ScriptControlClass msc=new MSScriptControl.ScriptControlClass();
msc.Language="vbs";
msc.ExecuteStatement("dim a");//模块
msc.ExecuteStatement("If True Then return a=1 End If ");//模块
object i=msc.Eval("a");
int b=int.Parse(i.ToString());