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下

解决方案 »

  1.   

    to 调用vba6.dll未将对象引用设置到对象的实例.此dll可能不是标准的dll,不能用dllimport来引入,你如下试试,用regsvr32来注册你的dll,然后通过引入com的方式来引入。
      

  2.   

    试过,was installed ,找不到enrypoint
      

  3.   

    to 我是com引用的如果是com引用,可以像使用本地类一样使用
      

  4.   

    using VBA;没看实例的类,请给出代码,不盛感谢
      

  5.   

    看看"VBA."之后会给出什么提示。
      

  6.   

    只有这两个类
    VBA.Constants c=new Constants();//无重载
    VBA.CollectionClass cc=new VBA.CollectionClass();//无重载
    都没EbExecuteLine方法
      

  7.   

    在线等啊,我看看http://www.codeproject.com
      

  8.   

    去搜索了一下,你的声明不对。第一个是int类型[DllImport("vba6.dll",EntryPoint="EbExecuteLine",CharSet=CharSet.Unicode)]
    public static extern int EbExecuteLine(
    int pStrToExec,
    int unkown1,
    int unkown2,
    int fCheckOnly);
      

  9.   

    Sorry,strPtr是地址类型,因此应该是:IntPtr[DllImport("vba6.dll",EntryPoint="EbExecuteLine",CharSet=CharSet.Unicode)]
    public static extern int EbExecuteLine(
    IntPtr pStrToExec,
    int unkown1,
    int unkown2,
    int fCheckOnly);
      

  10.   

    晕s,几天没上来,愚翁5颗星了(好像是.NET第一个五星的)
      

  11.   

    to kssys():
    pStrToExec,是字符串,要进去的是字符串指针,应用封送,功能就是求计算字符串表达式(包含非数值表达式的字符串)
      

  12.   

    to kssys();
    老大,你试过没,我都试过,这样用不匹配
      

  13.   

    没有确认,个人认为指针应该是IntPtr。我这边用2005,使用IntPtr的错误是“读写内存错误”
      

  14.   

    指针还分什么类型指针,不是什么指针都是intptr
      

  15.   

    首先在vs环境下的dos窗口,用dumpbin来输出你的dll,看看有没有EbExecuteLine这个函数,如果有的话,去掉charset标示,按照如下试试
    [DllImport("vba6.dll",EntryPoint="EbExecuteLine")]
    public static extern int EbExecuteLine(
    [MarshalAs(UnmanagedType.LPTStr )]
    string pStrToExec,
    int unkown1,
    int unkown2,
    int fCheckOnly);}
      

  16.   

    to knight94:
    非常感谢你的帮助,还是不行,不过我找到另一种方法
    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());