ConfusedDLLentrypoint(入口点未找到异常)我正在尝试学习如何在C#中使用DLL。我有一个非常简单的DLL只是为了测试基础知识。//MainForm.cs使用系统;使用System.Collections.Generic;使用System.ComponentModel;使用系统数据;使用系统绘图;使用System.Linq;使用系统文本;使用System.Windows.Forms;使用System.Runtime.InteropServices;命名空间DLL_Test{publicpartialclassForm1:Form{[DllImport("TestDLL.dll",EntryPoint="?Add@@YGHHH@Z",ExactSpelling=true,CallingConvention=CallingConvention.StdCall)]publicstaticexternintAdd(inta,整数b);publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){intnum;尝试{num=Add(2,3);richTextBox1.AppendText(num.ToString()+"n");}catch(DllNotFoundExceptionex){MessageBox.Show(ex.ToString());}catch(EntryPointNotFoundExceptionex){MessageBox.Show(ex.ToString());}}}}和DLL代码://TestDLL.cpp__declspec(dllexport)int__stdcallAdd(inta,intb){return(a+b);}dumpbin返回以下内容:ordinalhintRVAname1000011005?Add@@YGHHH@Z=@ILT+0(?Add@@YGHHH@Z)这(以及下面列出的其他尝试)都返回了相同的异常:System.EntryPointException:无法找到名为“...”的入口点所以我想知道如何解决这个问题对这个问题不知所措也许我不明白DllMain如何充当DLL的C#入口点。当我在C++应用程序中测试TestDLL.dll时,它可以正常工作。寻求帮助后,我尝试了以下更改://TestDLL.cppextern"C"__declspec(dllexport)int__stdcallAdd(inta,intb){return(a+b);这是dumpbin提示RVA名称1000011005_Add@8=@ILT+135(_Add@8)中的序数所以我更改了我的C#代码://MainForm.cs...[DllImport("TestDLL.dll",EntryPoint="_Add",ExactSpelling=true,CallingConvention=CallingConvention.StdCall)]publicstaticexternintAdd(inta,intb);...我也试过__cdecl://TestDLL.cppextern"C"__declspec(dllexport)int__cdeclAdd(inta,intb){return(a+b);}.//MainForm.cs...[DllImport("TestDLL.dll",EntryPoint="_Add",ExactSpelling=true,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintAdd(inta,intb);...也许我误解了调用约定。任何帮助将不胜感激。谢谢。使用extern"C"__declspec(dllexport)int__stdcallAdd(inta,intb){...}和[DllImport("TestDLL.dll",CallingConvention=CallingConvention.Stdcall)]publicstaticexternintAdd(inta,诠释b);extern"C"将防止名称与参数和返回类型混淆,例如?Add@@YGHHH@Z__stdcall将添加_并添加@8:_Add@8(其中8是参数的总大小)。请注意,它还会影响参数在堆栈上的推送方式。在DLLImport语句中,由于指定了CallingConvention.StdCall,因此无需指定名称重整。只需提供常规名称(Add),.NET将处理名称修改(_Add@8)。请注意,您必须指定CallingConvention,否则.NET将不会发出正确的代码以将参数推送到堆栈上以下应该有效。非托管:extern"C"__declspec(dllexport)intAdd(inta,intb){return(a+b);}托管:类程序{[DllImport("TestDLL.dll")]publicstaticexternintAdd(inta,intb);staticvoidMain(){Console.WriteLine(Add(1,2));供将来参考:我遇到了类似的问题并解决了创建EMPTYC++DLL项目的问题。可能是标准的VisualStudio模板造成了一些麻烦。请参考这个链接:http://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w以上是C#学习教程:困惑的DLL入口点(入口点未找到异常)全部内容分享,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——本文收集自网络且不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
