我创建了一个名为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答案 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方法加载给定的程序集 文件位置。使用此方法加载程序集使用不同的方法 加载上下文。
ReflectionOnlyLoad
和ReflectionOnlyLoadFrom
方法加载了 汇编到仅反射的上下文中。装配到此的装配体 上下文可以检查但不执行,允许检查 针对其他平台的程序集。
示例强>
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);
}
进一步阅读
答案 1 :(得分:0)
您必须声明入口点
[DllImport("ClassLibrary1.dll", EntryPoint = "iscalled", CallingConvention = CallingConvention.Cdecl)]
public static extern bool iscalled();