在VB中写的testDll.dll,并编译了,代码(已经通过VB调用的测试)如下:
Option ExplicitPublic Function jia(ByVal a As Long, ByVal b As Long) As Long
    Dim s As Long
    s = a + b
    jia = s
End FunctionC#的form代码如下:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace test11
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null; public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
} /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null) 
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
// 
// button1
// 
this.button1.Location = new System.Drawing.Point(192, 88);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(64, 24);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
// 
// Form1
// 
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main() 
{
Application.Run(new Form1());
} private void button1_Click(object sender, System.EventArgs e)
{
c1 c = new c1();
c.Jia(1,2);
}
}
}c#中类c1的代码如下:
using System;
using System.Runtime.InteropServices;namespace test11
{
/// <summary>
/// c1 的摘要说明。
/// </summary>
public class c1
{
public c1()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[DllImport("testDll.dll")]
private static extern void jia(int a,int b); public void Jia(int pX,int pY)
{
int i;
i=jia( pX, pY);
} }
}已经把testDll.dll拷到了bin\Debug的目录。运行程序错误提示:无法在 DLL testDll.dll 中找到名为 jia 的入口点

解决方案 »

  1.   

    http://www.programfan.com/article/showarticle.asp?id=2613
      

  2.   

    private static extern void jia??? void?jia不是有返回值吗??是不是这个问题?
      

  3.   

    不是要调用API的呀private static extern void jia改为private static extern int jia
    也是一样的
      

  4.   

    [DllImport("testDll.dll")]
    private static extern void jia(int a,int b); public void Jia(int pX,int pY)
    {
    int i;
    i=jia( pX, pY);
    }
    没见过这样写的。
    你直接在.net中引用就可以了。不用dllimport ,而且你做的还不正确。ft
      

  5.   

    是vb.net写的还是vb写的呀,如果不是.net程序,试试下面的;如果是vb.net写的,直接引用dll文件就可以调用了.[DllImport("testDll.dll")]
    private static extern int jia(int a,int b); public int Jia(int pX,int pY)
    {
    int i;
    i=jia( pX, pY);
    }
      

  6.   

    照着这个写就可以了
    http://www.c-sharpcorner.com/3/CSNActiveXAN.asp