DLL函数调用不起作用

时间:2018-04-13 05:25:14

标签: c# dll

我创建了一个名为ClassLibrary1.dll的DLL 它只包含类 Class1 中的一个函数 iscalled()

//Function of DLL
public bool iscalled()
  {
     return true;
  }

现在我已经创建了一个WINFORM的新项目,并添加了我自己的dll ClassLibrary1 的引用。

以下是winForm代码的代码片段

[DllImport("ClassLibrary1.dll")]
public static extern bool iscalled();


public void mydllcall1()
 {          
     bool ud = iscalled();
     MessageBox.Show(ud.ToString());
 }

当我运行应用程序时,遇到错误说明

  

无法在DLL'ClassLibrary1.dll

中找到名为'iscalled'的入口点

我正在寻找一些解决方案。

谢谢和问候

Subham Kumar, Nathcorp

2 个答案:

答案 0 :(得分:4)

您无法在.net程序集上调用DLLImport。 (DLLImport属性用于标准Dynamic-Link Libraries)。您需要使用Assembly.Load或类似的

How to: Load Assemblies into an Application Domain

  

有几种方法可以将程序集加载到应用程序域中。   建议的方法是使用静态(在Visual Basic中共享)Load   System.Reflection.Assembly类的方法。其他组装方式   可以加载包括:

     
      
  • Assembly类的LoadFrom方法加载给定的程序集   文件位置。使用此方法加载程序集使用不同的方法   加载上下文。

  •   
  • ReflectionOnlyLoadReflectionOnlyLoadFrom方法加载了   汇编到仅反射的上下文中。装配到此的装配体   上下文可以检查但不执行,允许检查   针对其他平台的程序集。

  •   

示例

public static void Main()
{
    // Use the file name to load the assembly into the current
    // application domain.
    Assembly a = Assembly.Load("example");
    // Get the type to use.
    Type myType = a.GetType("Example");
    // Get the method to call.
    MethodInfo myMethod = myType.GetMethod("MethodA");
    // Create an instance.
    object obj = Activator.CreateInstance(myType);
    // Execute the method.
    myMethod.Invoke(obj, null);
}

进一步阅读

Assembly.Load Method (AssemblyName)

答案 1 :(得分:0)

您必须声明入口点

[DllImport("ClassLibrary1.dll", EntryPoint = "iscalled", CallingConvention = CallingConvention.Cdecl)]
public static extern bool iscalled();