C# 找不到名为';JoinString';在DLL中';Dll.Dll';。在C中#
我在c#中创建了一个dll,您可以通过此方法看到:C# 找不到名为';JoinString';在DLL中';Dll.Dll';。在C中#,c#,dll,dllimport,C#,Dll,Dllimport,我在c#中创建了一个dll,您可以通过此方法看到: namespace Dll { public class Check { public string JoinString(string fristName, string Lastname) { return fristName + " " + Lastname; } } } 我构建了这个DLL,我想在另一个应用程序中使用它,如您在这里看到的
namespace Dll
{
public class Check
{
public string JoinString(string fristName, string Lastname)
{
return fristName + " " + Lastname;
}
}
}
我构建了这个DLL,我想在另一个应用程序中使用它,如您在这里看到的:
[DllImport("Dll.dll", EntryPoint = "JoinString")]
public static extern string JoinString (string fristName, string Lastname);
private void button1_Click(object sender, EventArgs e)
{
string s = JoinString("aaa", "bbbb");
MessageBox.Show(s.ToString());
}
但我得到了这个错误:
An unhandled exception of type 'System.EntryPointNotFoundException' occurred in WindowsFormsApplication3.exe
Additional information: Unable to find an entry point named 'JoinString' in DLL 'Dll.dll'.
根据MSDN:
DllImportAttribute:表示属性化方法由非托管动态链接库(DLL)作为静态入口点公开
您的DLL名称空间似乎是用C#编写的,C#是托管代码。这将导致一个托管dll。相反,您应该添加对dll项目的引用,或者利用nuget将dll安装到其他项目中。我必须使用它进行dll导入。那么我如何才能更改为非托管代码?C完全是托管代码。你必须在C++或C中使用这个库来使用DLILILATATIRTBUTE。请看下面的线索:似乎有一个解决办法,但我从来没有必要这样做,也无法提供可靠的答案。你为什么要使用DllImport?因为我的dll每周都会更改。因此,使用DllImport,我可以替换新的dll。你只需将dll替换到位,它就会被使用。此外,无需对自己的dll使用nuget,只需添加对项目或原始dll的引用。只要您没有对程序集进行强命名,那么您只需使用较新版本进行替换,并且只要该类存在于命名空间中且方法都向后兼容,一切都可以正常工作。MEF或反射在这里绝对是过火了。