无法找到名为的入口点

时间:2012-12-14 16:09:07

标签: c# c++ pinvoke

我在c#编写一个应用程序,它使用在cpp中编码的第三方dll。我打了几个电话给dll,除了一个,它们都在工作。

我的代码以下列方式拨打电话:

return ObjectGetStringEntryID(pObject, strEntryID, strEntryID.Capacity);

[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern bool ObjectGetStringEntryID(IntPtr pObject, StringBuilder strEntryID, int nMaxLength);

由于我可以访问源代码,因此我知道它包含以下定义:

BOOL ObjectGetStringEntryID(CMAPIObject* pObject, LPTSTR szEntryID, int nMaxLength)

如前所述,我使用相同的格式对此dll进行了几次其他调用,并且它们是成功的。

因此,如果有帮助,我会进行以下设置:

public const CharSet DefaultCharSet = CharSet.Ansi;

有人在电话中看到我的错误吗?我从同一个班级打来电话:

MessageGetSubject(pObject, strSubject, strSubject.Capacity);

[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern void MessageGetSubject(IntPtr pMessage, StringBuilder strSubject, int nMaxLength);

哪种方法符合方法:

void MessageGetSubject(CMAPIMessage* pMessage, LPTSTR szSubject, int nMaxLength)

这来自c#和cpp中的相同类,因为调用不起作用,但它的工作正常。它的调用方式似乎没有任何差别,因此它们既可以工作也可以不工作。

如果有人对我做错了什么有任何见解,我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

EntryPointNotFoundException表示DLL不会导出符号ObjectGetStringEntryID。检查导出文件(或__declspec声明)以确保导出文件以及该名称。

这可能有所帮助:Exporting from a DLL