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.   

    试试运行: regsvr32 vba6.dll
      

  2.   

    如果是com ,你这样调用是不对的
    你必须先保证这个com注册过,然后在VS.net中引用这个com,就可以调用了
      

  3.   

    using VBA;下面代码如何写,没看到实例化的类
      

  4.   

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

  5.   

    这个问题一般是参数类型不正确。检查你的参数是否以DLL声明中一致
      

  6.   

    这个问题一般是参数类型不正确。检查你的参数是否以DLL声明中一致如果这个DLL是以VB写的,第一个参数有问题。VB中好像没有LPSTR这种类型
    [MarshalAs(UnmanagedType.LPStr)]
      

  7.   

    这我研究过,
    [MarshalAs(UnmanagedType.LPStr)]//以字符串的指针封送
    StringBuilder pStrToExec,
    int unkown1,//win32的long(4 byte) 在.net 为int(4 byte)
    int unkown2,,//win32的long(4 byte) 在.net 为int(4 byte) int fCheckOnly);//win32的long(4 byte) 在.net 为int(4 byte)
      

  8.   

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

  9.   

    to kssys():
    你怎么把字符串指针传进来?我试过unsafe,你怎么传呢